Some cleanup
This commit is contained in:
@@ -52,7 +52,7 @@ const CurrentPage = ({ page, pageProps = {} }) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const AppShell = ({ page, pageProps }) => {
|
const AppShell = ({ page, pageProps }) => {
|
||||||
const [location, setLocation] = useLocation();
|
const [location] = useLocation();
|
||||||
|
|
||||||
const showMenu = Store.useState(selectors.getMenuOpen);
|
const showMenu = Store.useState(selectors.getMenuOpen);
|
||||||
const showNotifications = Store.useState(selectors.getNotificationsOpen);
|
const showNotifications = Store.useState(selectors.getNotificationsOpen);
|
||||||
@@ -80,7 +80,7 @@ const AppShell = ({ page, pageProps }) => {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
console.log('Got location', location, '/settings' === location);
|
console.log('Got location', location);
|
||||||
|
|
||||||
// This is an example app layout. We've got a hidden menu that will be toggled
|
// This is an example app layout. We've got a hidden menu that will be toggled
|
||||||
//
|
//
|
||||||
@@ -97,7 +97,6 @@ const AppShell = ({ page, pageProps }) => {
|
|||||||
<MenuContent />
|
<MenuContent />
|
||||||
</Menu>
|
</Menu>
|
||||||
<Nav page={currentPage} />
|
<Nav page={currentPage} />
|
||||||
{/*<CurrentPage page={currentPage} />*/}
|
|
||||||
<CurrentPage page={page} pageProps={pageProps} />
|
<CurrentPage page={page} pageProps={pageProps} />
|
||||||
<TabBar>
|
<TabBar>
|
||||||
<Tab
|
<Tab
|
||||||
@@ -105,7 +104,7 @@ const AppShell = ({ page, pageProps }) => {
|
|||||||
selectedIcon={home}
|
selectedIcon={home}
|
||||||
title="Home"
|
title="Home"
|
||||||
href="/"
|
href="/"
|
||||||
selected={'/home' === location}
|
selected={'/' === location}
|
||||||
/>
|
/>
|
||||||
<Tab
|
<Tab
|
||||||
icon={listOutline}
|
icon={listOutline}
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import { Link } from 'wouter';
|
import { Link } from 'wouter';
|
||||||
|
|
||||||
import usePage from '../../hooks/usePage';
|
import usePage from '../../hooks/usePage';
|
||||||
import { lists } from '../../mock';
|
|
||||||
import Store from '../../store';
|
import Store from '../../store';
|
||||||
import * as actions from '../../store/actions';
|
import * as actions from '../../store/actions';
|
||||||
import * as selectors from '../../store/selectors';
|
import * as selectors from '../../store/selectors';
|
||||||
@@ -41,14 +40,17 @@ const ListItemEntry = ({ list, item }) => (
|
|||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
||||||
const ListDetail = ({ selected, list, listId, params }) => {
|
const ListDetail = ({ selected, listId, params }) => {
|
||||||
const selectedList = Store.useState(selectors.getSelectedList);
|
const lists = Store.useState(selectors.getLists);
|
||||||
|
const actualListId = listId ? listId : params?.listId || null;
|
||||||
|
const loadedList = lists.find(l => l.id === actualListId);
|
||||||
|
|
||||||
const loadedList = list ? list : lists.find(l => l.id === params.listId);
|
usePage(
|
||||||
|
{
|
||||||
usePage({
|
title: loadedList.name,
|
||||||
title: loadedList.title,
|
},
|
||||||
});
|
[loadedList]
|
||||||
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Content className="p-4">
|
<Content className="p-4">
|
||||||
|
|||||||
+24
-24
@@ -1,5 +1,29 @@
|
|||||||
import { useEffect, useRef, useState, useCallback } from 'react';
|
import { useEffect, useRef, useState, useCallback } from 'react';
|
||||||
|
|
||||||
|
// useEffect(() => {
|
||||||
|
// While History API does have `popstate` event, the only
|
||||||
|
// proper way to listen to changes via `push/replaceState`
|
||||||
|
// is to monkey-patch these methods.
|
||||||
|
//
|
||||||
|
// See https://stackoverflow.com/a/4585031
|
||||||
|
if (typeof history !== 'undefined') {
|
||||||
|
for (const type of [eventPushState, eventReplaceState]) {
|
||||||
|
const original = history[type];
|
||||||
|
|
||||||
|
history[type] = function () {
|
||||||
|
const result = original.apply(this, arguments);
|
||||||
|
const event = new Event(type);
|
||||||
|
event.arguments = arguments;
|
||||||
|
|
||||||
|
dispatchEvent(event);
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.log('No history API');
|
||||||
|
}
|
||||||
|
// });
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* History API docs @see https://developer.mozilla.org/en-US/docs/Web/API/History
|
* History API docs @see https://developer.mozilla.org/en-US/docs/Web/API/History
|
||||||
*/
|
*/
|
||||||
@@ -20,30 +44,6 @@ const useLocation = ({ base = '' } = {}) => {
|
|||||||
const [path, update] = useState(() => getCurrentPathname(base)); // @see https://reactjs.org/docs/hooks-reference.html#lazy-initial-state
|
const [path, update] = useState(() => getCurrentPathname(base)); // @see https://reactjs.org/docs/hooks-reference.html#lazy-initial-state
|
||||||
const prevPath = useRef(path);
|
const prevPath = useRef(path);
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
// While History API does have `popstate` event, the only
|
|
||||||
// proper way to listen to changes via `push/replaceState`
|
|
||||||
// is to monkey-patch these methods.
|
|
||||||
//
|
|
||||||
// See https://stackoverflow.com/a/4585031
|
|
||||||
if (typeof history !== 'undefined') {
|
|
||||||
for (const type of [eventPushState, eventReplaceState]) {
|
|
||||||
const original = history[type];
|
|
||||||
|
|
||||||
history[type] = function () {
|
|
||||||
const result = original.apply(this, arguments);
|
|
||||||
const event = new Event(type);
|
|
||||||
event.arguments = arguments;
|
|
||||||
|
|
||||||
dispatchEvent(event);
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
console.log('No history API');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
// this function checks if the location has been changed since the
|
// this function checks if the location has been changed since the
|
||||||
// last render and updates the state only when needed.
|
// last render and updates the state only when needed.
|
||||||
|
|||||||
+3
-2
@@ -1,12 +1,13 @@
|
|||||||
import { useEffect } from 'react';
|
import { useEffect } from 'react';
|
||||||
import Store from '../store';
|
import Store from '../store';
|
||||||
|
|
||||||
const usePage = fields => {
|
const usePage = (fields, deps) => {
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
console.log('Deps updating', fields, deps);
|
||||||
Store.update(s => {
|
Store.update(s => {
|
||||||
s.currentPage = fields;
|
s.currentPage = fields;
|
||||||
});
|
});
|
||||||
}, [fields]);
|
}, [fields, deps]);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default usePage;
|
export default usePage;
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
import AppShell from '../../components/AppShell';
|
import AppShell from '../../components/AppShell';
|
||||||
import ListDetailPage from '../../components/pages/ListDetail';
|
import ListDetailPage from '../../components/pages/ListDetail';
|
||||||
import { lists } from '../../mock';
|
|
||||||
|
|
||||||
export default function ListDetail({ list }) {
|
export default function ListDetail({ listId }) {
|
||||||
return <AppShell page={ListDetailPage} pageProps={{ list }} />;
|
return <AppShell page={ListDetailPage} pageProps={{ listId }} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const getServerSideProps = context => {
|
export const getServerSideProps = context => {
|
||||||
@@ -11,12 +10,9 @@ export const getServerSideProps = context => {
|
|||||||
params: { listId },
|
params: { listId },
|
||||||
} = context;
|
} = context;
|
||||||
|
|
||||||
const list = lists.find(l => l.id === listId);
|
|
||||||
console.log('Loaded list', list);
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
props: {
|
props: {
|
||||||
list,
|
listId,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ export const setSettings = settings => {
|
|||||||
export const setDone = (list, item, done) => {
|
export const setDone = (list, item, done) => {
|
||||||
Store.update((s, o) => {
|
Store.update((s, o) => {
|
||||||
const listIndex = o.lists.findIndex(l => l === list);
|
const listIndex = o.lists.findIndex(l => l === list);
|
||||||
|
console.log('Setting done', list, item, done, o.lists, listIndex);
|
||||||
const itemIndex = o.lists[listIndex].items.findIndex(i => i === item);
|
const itemIndex = o.lists[listIndex].items.findIndex(i => i === item);
|
||||||
s.lists[listIndex].items[itemIndex].done = done;
|
s.lists[listIndex].items[itemIndex].done = done;
|
||||||
if (list === o.selectedList) {
|
if (list === o.selectedList) {
|
||||||
|
|||||||
@@ -49,7 +49,6 @@ const Store = new PullStateStore({
|
|||||||
currentPage: null,
|
currentPage: null,
|
||||||
homeItems,
|
homeItems,
|
||||||
lists,
|
lists,
|
||||||
selectedList: null,
|
|
||||||
settings: {
|
settings: {
|
||||||
enableNotifications: true,
|
enableNotifications: true,
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -9,5 +9,4 @@ export const getCurrentPage = createSelector(getState, state => state.currentPag
|
|||||||
// App specific selectors
|
// App specific selectors
|
||||||
export const getHomeItems = createSelector(getState, state => state.homeItems);
|
export const getHomeItems = createSelector(getState, state => state.homeItems);
|
||||||
export const getLists = createSelector(getState, state => state.lists);
|
export const getLists = createSelector(getState, state => state.lists);
|
||||||
export const getSelectedList = createSelector(getState, state => state.selectedList);
|
|
||||||
export const getSettings = createSelector(getState, state => state.settings);
|
export const getSettings = createSelector(getState, state => state.settings);
|
||||||
|
|||||||
Reference in New Issue
Block a user