Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Multi branch tree #21

Merged
merged 246 commits into from
May 31, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
246 commits
Select commit Hold shift + click to select a range
240c977
create more nodes functions
barbalex May 22, 2024
9ad1f73
query and pass open nodes
barbalex May 22, 2024
fd13f64
try watching pathname
barbalex May 22, 2024
9ce6f11
work on nodes
barbalex May 22, 2024
d248a42
comment
barbalex May 23, 2024
9027d43
update deps
barbalex May 23, 2024
860a4b7
work on it
barbalex May 23, 2024
aedc326
clean
barbalex May 23, 2024
6ab6ead
clean
barbalex May 23, 2024
506e761
add missing nodes on navigation
barbalex May 23, 2024
9046cd6
clean
barbalex May 23, 2024
dd41b7f
implement closing tree button
barbalex May 23, 2024
9f3973c
clean
barbalex May 23, 2024
291bafd
clean
barbalex May 23, 2024
809eb9d
catch
barbalex May 23, 2024
0043c7b
remove child nodes on close
barbalex May 23, 2024
283bc2e
remove child nodes on close
barbalex May 23, 2024
b8e9e72
remove child nodes on close
barbalex May 23, 2024
bd052f8
remove child nodes on close
barbalex May 23, 2024
509215b
remove child nodes on close
barbalex May 23, 2024
ff509e4
remove child nodes on close
barbalex May 23, 2024
78ca40d
remove child nodes on close
barbalex May 23, 2024
fff4293
remove child nodes on close
barbalex May 23, 2024
c160289
remove child nodes on close
barbalex May 23, 2024
2e09aa1
remove child nodes on close
barbalex May 23, 2024
306218e
remove child nodes on close
barbalex May 23, 2024
c1fca5e
remove child nodes on close
barbalex May 23, 2024
41b6f0a
remove child nodes on close
barbalex May 23, 2024
8c05758
remove child nodes on close
barbalex May 23, 2024
499bb61
remove child nodes on close
barbalex May 23, 2024
ec6185e
remove child nodes on close
barbalex May 23, 2024
05d0cbf
remove child nodes on close
barbalex May 23, 2024
2b65341
remove child nodes on close
barbalex May 23, 2024
6e25b45
Merge branch 'main' into multi-branch-tree
barbalex May 24, 2024
0c85ea5
Update package-lock.json
barbalex May 24, 2024
3b29145
remove child nodes on close
barbalex May 24, 2024
105f98f
remove child nodes on close
barbalex May 24, 2024
8aae111
remove child nodes on close
barbalex May 24, 2024
3ddc88e
remove child nodes on close
barbalex May 24, 2024
18e4640
remove child nodes on close
barbalex May 24, 2024
6c7b19d
remove child nodes on close
barbalex May 24, 2024
d9ab570
remove child nodes on close
barbalex May 24, 2024
a6adb93
remove child nodes on close
barbalex May 24, 2024
e7bd6f2
remove child nodes on close
barbalex May 24, 2024
0a655b4
remove child nodes on close
barbalex May 24, 2024
c3e10d7
remove child nodes on close
barbalex May 24, 2024
13c1d25
remove child nodes on close
barbalex May 24, 2024
9eed40d
remove child nodes on close
barbalex May 24, 2024
5327074
remove child nodes on close
barbalex May 25, 2024
0744b7a
remove child nodes on close
barbalex May 25, 2024
943320f
remove child nodes on close
barbalex May 25, 2024
e6b284f
remove child nodes on close
barbalex May 25, 2024
1e11d18
remove child nodes on close
barbalex May 25, 2024
95362f6
remove child nodes on close
barbalex May 25, 2024
bd40159
remove child nodes on close
barbalex May 25, 2024
728507d
remove child nodes on close
barbalex May 25, 2024
8e61d65
remove child nodes on close
barbalex May 25, 2024
8aa26eb
remove child nodes on close
barbalex May 25, 2024
302bf9d
remove child nodes on close
barbalex May 25, 2024
678845e
remove child nodes on close
barbalex May 25, 2024
3666ed1
remove child nodes on close
barbalex May 25, 2024
aea1b8c
remove child nodes on close
barbalex May 25, 2024
dfedd07
remove child nodes on close
barbalex May 25, 2024
dae2929
remove child nodes on close
barbalex May 25, 2024
6546230
remove child nodes on close
barbalex May 25, 2024
6f69052
remove child nodes on close
barbalex May 25, 2024
fde629a
remove child nodes on close
barbalex May 25, 2024
50ea8e1
remove child nodes on close
barbalex May 25, 2024
eea9e5c
remove child nodes on close
barbalex May 25, 2024
141c4ec
remove child nodes on close
barbalex May 25, 2024
2ac6db9
remove child nodes on close
barbalex May 25, 2024
797724d
remove child nodes on close
barbalex May 25, 2024
8f2c634
remove child nodes on close
barbalex May 25, 2024
88fc786
remove child nodes on close
barbalex May 25, 2024
b752948
remove child nodes on close
barbalex May 25, 2024
2f8706a
remove child nodes on close
barbalex May 25, 2024
15f9e5b
remove child nodes on close
barbalex May 25, 2024
87ad566
remove child nodes on close
barbalex May 25, 2024
4857a5a
remove child nodes on close
barbalex May 25, 2024
80e83d0
remove child nodes on close
barbalex May 25, 2024
d27cbb0
remove child nodes on close
barbalex May 25, 2024
c294acb
remove child nodes on close
barbalex May 25, 2024
a976df6
remove child nodes on close
barbalex May 25, 2024
61a10a7
remove child nodes on close
barbalex May 25, 2024
2ac732e
remove child nodes on close
barbalex May 25, 2024
fa72410
remove child nodes on close
barbalex May 25, 2024
9c1bde3
remove child nodes on close
barbalex May 25, 2024
9190807
remove child nodes on close
barbalex May 25, 2024
60a9b77
remove child nodes on close
barbalex May 25, 2024
8742f0c
remove child nodes on close
barbalex May 25, 2024
27a28f7
remove child nodes on close
barbalex May 25, 2024
6b1ec1a
remove child nodes on close
barbalex May 25, 2024
08359a9
remove child nodes on close
barbalex May 25, 2024
68298b1
remove child nodes on close
barbalex May 25, 2024
3f83dee
remove child nodes on close
barbalex May 25, 2024
b361609
remove child nodes on close
barbalex May 25, 2024
6b3ce46
remove child nodes on close
barbalex May 25, 2024
9415bbb
remove child nodes on close
barbalex May 25, 2024
3c8b11a
remove child nodes on close
barbalex May 25, 2024
9529a3e
remove child nodes on close
barbalex May 25, 2024
b5d5286
remove child nodes on close
barbalex May 25, 2024
f1652cc
remove child nodes on close
barbalex May 25, 2024
aa1f0a9
remove child nodes on close
barbalex May 25, 2024
76c8275
remove child nodes on close
barbalex May 25, 2024
469efe4
remove child nodes on close
barbalex May 25, 2024
b198a39
remove child nodes on close
barbalex May 25, 2024
acc7011
warn, not error
barbalex May 27, 2024
f561479
add missing import
barbalex May 27, 2024
20b23f8
pass root
barbalex May 29, 2024
582f351
pass root
barbalex May 29, 2024
2088cd5
pass root
barbalex May 29, 2024
8ca6963
pass root
barbalex May 29, 2024
198e315
include equal
barbalex May 29, 2024
af25e48
get roots to work
barbalex May 29, 2024
b3dc6d9
nav from roots to parent
barbalex May 29, 2024
157238e
nav from roots to parent
barbalex May 29, 2024
62acbe8
move docs
barbalex May 29, 2024
24f0c79
refactor url
barbalex May 29, 2024
c557d28
refactor url
barbalex May 29, 2024
b5fca32
refactor url
barbalex May 29, 2024
d078f30
refactor url
barbalex May 29, 2024
a8e4944
refactor url
barbalex May 29, 2024
b99cfbf
refactor url
barbalex May 29, 2024
b2c80ae
refactor url
barbalex May 29, 2024
5afa199
refactor url
barbalex May 29, 2024
136d2e5
refactor url
barbalex May 29, 2024
6e7b290
refactor url
barbalex May 29, 2024
90367ba
refactor url
barbalex May 29, 2024
ff5c149
refactor url
barbalex May 29, 2024
5a04b12
refactor url
barbalex May 29, 2024
5290fba
refactor url
barbalex May 29, 2024
6d4cfb4
refactor url
barbalex May 29, 2024
0fe1ad7
refactor url
barbalex May 29, 2024
d96c4f6
refactor url
barbalex May 29, 2024
63d3dfe
refactor url
barbalex May 29, 2024
054defb
refactor url
barbalex May 29, 2024
9e89ef8
refactor url
barbalex May 29, 2024
d8eb3a6
refactor url
barbalex May 29, 2024
2b8a66b
refactor url
barbalex May 29, 2024
5606a0e
refactor url
barbalex May 29, 2024
c12474c
refactor url
barbalex May 29, 2024
981adf0
refactor url
barbalex May 29, 2024
dac11e6
refactor url
barbalex May 29, 2024
e3bdfce
refactor url
barbalex May 29, 2024
0b216c5
refactor url
barbalex May 29, 2024
91880e8
refactor url
barbalex May 29, 2024
7f66f0c
refactor url
barbalex May 29, 2024
e8fdd45
refactor url
barbalex May 29, 2024
ad3d343
refactor url
barbalex May 29, 2024
6077e55
refactor url
barbalex May 29, 2024
f22ba0f
refactor url
barbalex May 29, 2024
d872216
refactor url
barbalex May 29, 2024
5b55160
refactor url
barbalex May 29, 2024
2a9c169
refactor url
barbalex May 29, 2024
91f082b
correct
barbalex May 29, 2024
5b0a89f
correct
barbalex May 29, 2024
b6b1ed8
update deps
barbalex May 29, 2024
35a5837
refactor url
barbalex May 29, 2024
dff2c8e
refactor url
barbalex May 29, 2024
5792b5f
refactor url
barbalex May 29, 2024
5b1f172
refactor url
barbalex May 29, 2024
181abb6
refactor url
barbalex May 29, 2024
133cf5d
update deps
barbalex May 30, 2024
0b5be73
tree: enable multiple branches
barbalex May 30, 2024
0257a76
tree: enable multiple branches
barbalex May 30, 2024
99d4a79
tree: enable multiple branches
barbalex May 30, 2024
0490cba
tree: enable multiple branches
barbalex May 30, 2024
34b0817
tree: enable multiple branches
barbalex May 30, 2024
6f0edb3
tree: enable multiple branches
barbalex May 30, 2024
c4497ae
tree: enable multiple branches
barbalex May 30, 2024
e54d9b8
tree: enable multiple branches
barbalex May 30, 2024
aed8638
tree: enable multiple branches
barbalex May 30, 2024
e5684e8
tree: enable multiple branches
barbalex May 30, 2024
ea9801e
tree: enable multiple branches
barbalex May 30, 2024
118718b
tree: enable multiple branches
barbalex May 30, 2024
d85c1b0
tree: enable multiple branches
barbalex May 30, 2024
8db8cb7
tree: enable multiple branches
barbalex May 30, 2024
0b93f7f
tree: enable multiple branches
barbalex May 30, 2024
89ed50d
tree: enable multiple branches
barbalex May 30, 2024
aaf9e85
tree: enable multiple branches
barbalex May 30, 2024
8991ee7
tree: enable multiple branches
barbalex May 30, 2024
b417f32
tree: enable multiple branches
barbalex May 30, 2024
037d718
tree: enable multiple branches
barbalex May 30, 2024
f775273
tree: enable multiple branches
barbalex May 30, 2024
4c6debc
tree: enable multiple branches
barbalex May 30, 2024
0f7e342
tree: enable multiple branches
barbalex May 30, 2024
4b10bad
tree: enable multiple branches
barbalex May 30, 2024
374abb8
tree: enable multiple branches
barbalex May 30, 2024
837a0fe
tree: enable multiple branches
barbalex May 30, 2024
cbabc4f
tree: enable multiple branches
barbalex May 30, 2024
2af355f
tree: enable multiple branches
barbalex May 30, 2024
f18d11d
tree: enable multiple branches
barbalex May 30, 2024
9be6203
tree: enable multiple branches
barbalex May 30, 2024
d7cf01d
tree: enable multiple branches
barbalex May 30, 2024
9e366cf
tree: enable multiple branches
barbalex May 30, 2024
14226a4
tree: enable multiple branches
barbalex May 31, 2024
c2315c1
tree: enable multiple branches
barbalex May 31, 2024
fe3e5bb
tree: enable multiple branches
barbalex May 31, 2024
eed580e
tree: enable multiple branches
barbalex May 31, 2024
0d60808
tree: enable multiple branches
barbalex May 31, 2024
eab608c
tree: enable multiple branches
barbalex May 31, 2024
208fdbf
tree: enable multiple branches
barbalex May 31, 2024
784febe
tree: enable multiple branches
barbalex May 31, 2024
e69ea93
tree: enable multiple branches
barbalex May 31, 2024
39e0ee6
tree: enable multiple branches
barbalex May 31, 2024
18ad72a
tree: enable multiple branches
barbalex May 31, 2024
c7f24ea
tree: enable multiple branches
barbalex May 31, 2024
e229742
tree: enable multiple branches
barbalex May 31, 2024
4110afd
tree: enable multiple branches
barbalex May 31, 2024
d3909fe
tree: enable multiple branches
barbalex May 31, 2024
e15a8eb
tree: enable multiple branches
barbalex May 31, 2024
179f093
tree: enable multiple branches
barbalex May 31, 2024
c932a48
tree: enable multiple branches
barbalex May 31, 2024
ef3b762
tree: enable multiple branches
barbalex May 31, 2024
e91a3bc
tree: enable multiple branches
barbalex May 31, 2024
041ebda
tree: enable multiple branches
barbalex May 31, 2024
bfaa1f5
tree: enable multiple branches
barbalex May 31, 2024
e004e30
tree: enable multiple branches
barbalex May 31, 2024
baa5b98
tree: enable multiple branches
barbalex May 31, 2024
f179b9a
tree: enable multiple branches
barbalex May 31, 2024
68fa888
tree: enable multiple branches
barbalex May 31, 2024
da58aa7
tree: enable multiple branches
barbalex May 31, 2024
905f39a
tree: enable multiple branches
barbalex May 31, 2024
c46c194
tree: enable multiple branches
barbalex May 31, 2024
28ae985
tree: enable multiple branches
barbalex May 31, 2024
d95a5ce
tree: enable multiple branches
barbalex May 31, 2024
9d95dfd
tree: enable multiple branches
barbalex May 31, 2024
4d58882
tree: enable multiple branches
barbalex May 31, 2024
594c853
tree: enable multiple branches
barbalex May 31, 2024
0374ff7
tree: enable multiple branches
barbalex May 31, 2024
f4d16f3
tree: enable multiple branches
barbalex May 31, 2024
c31a50b
tree: enable multiple branches
barbalex May 31, 2024
65db538
tree: enable multiple branches
barbalex May 31, 2024
2aadf03
tree: enable multiple branches
barbalex May 31, 2024
02d3290
tree: enable multiple branches
barbalex May 31, 2024
a33f3f3
tree: enable multiple branches
barbalex May 31, 2024
97454be
tree: enable multiple branches
barbalex May 31, 2024
74a94dd
tree: enable multiple branches
barbalex May 31, 2024
1f94abf
tree: enable multiple branches
barbalex May 31, 2024
43acfcd
tree: enable multiple branches
barbalex May 31, 2024
207923f
tree: enable multiple branches
barbalex May 31, 2024
a20b1bb
tree: enable multiple branches
barbalex May 31, 2024
ea36090
tree: enable multiple branches
barbalex May 31, 2024
d45f6e0
tree: enable multiple branches
barbalex May 31, 2024
24e581c
tree: enable multiple branches
barbalex May 31, 2024
5fd2295
tree: enable multiple branches
barbalex May 31, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"cSpell.words": [
"subproject",
"subprojects"
]
}
1,518 changes: 738 additions & 780 deletions package-lock.json

Large diffs are not rendered by default.

34 changes: 17 additions & 17 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@
"@corbado/react": "2.8.0",
"@css-hooks/react": "2.0.4",
"@css-hooks/recommended": "2.0.4",
"@cyntler/react-doc-viewer": "1.15.0",
"@fluentui/react-components": "9.52.0",
"@fluentui/react-datepicker-compat": "0.4.38",
"@cyntler/react-doc-viewer": "1.15.1",
"@fluentui/react-components": "9.53.0",
"@fluentui/react-datepicker-compat": "0.4.39",
"@fluentui/react-icons": "2.0.240",
"@fluentui/react-timepicker-compat-preview": "0.2.0",
"@formkit/tempo": "0.1.1",
Expand All @@ -34,13 +34,13 @@
"@turf/point-to-line-distance": "6.5.0",
"@turf/points-within-polygon": "6.5.0",
"@turf/polygon-to-line": "6.5.0",
"@uploadcare/blocks": "0.40.0",
"allotment": "1.20.1",
"@uploadcare/blocks": "0.41.1",
"allotment": "1.20.2",
"array-move": "4.0.0",
"dayjs": "1.11.11",
"dotenv": "16.4.5",
"electric-sql": "0.11.3",
"framer-motion": "11.2.5",
"framer-motion": "11.2.9",
"is-uuid": "1.0.2",
"leaflet": "1.9.4",
"leaflet-draw": "1.0.4",
Expand All @@ -63,33 +63,33 @@
"react-xml-viewer": "2.0.1",
"recharts": "2.12.7",
"redaxios": "0.5.1",
"use-debounce": "10.0.0",
"use-debounce": "10.0.1",
"wa-sqlite": "rhashimoto/wa-sqlite#semver:v0.9.13",
"wms-capabilities": "0.6.0",
"xlsx": "0.18.5",
"zod": "3.23.8"
},
"devDependencies": {
"@databases/pg-migrations": "5.0.3",
"@eslint/compat": "^1.0.1",
"@eslint/eslintrc": "^3.1.0",
"@eslint/js": "^9.3.0",
"@eslint/compat": "1.0.1",
"@eslint/eslintrc": "3.1.0",
"@eslint/js": "9.3.0",
"@types/leaflet": "1.9.12",
"@types/leaflet-draw": "1.0.11",
"@types/proj4": "2.5.5",
"@types/proj4leaflet": "1.0.10",
"@types/react": "18.3.2",
"@types/react": "18.3.3",
"@types/react-dom": "18.3.0",
"@typescript-eslint/eslint-plugin": "7.10.0",
"@typescript-eslint/parser": "7.10.0",
"@vitejs/plugin-react": "4.2.1",
"eslint": "^9.3.0",
"@typescript-eslint/eslint-plugin": "7.11.0",
"@typescript-eslint/parser": "7.11.0",
"@vitejs/plugin-react": "4.3.0",
"eslint": "9.3.0",
"eslint-plugin-import": "2.29.1",
"eslint-plugin-react-hooks": "4.6.2",
"eslint-plugin-react-refresh": "0.4.7",
"globals": "^15.3.0",
"globals": "15.3.0",
"typescript": "5.4.5",
"vite": "5.2.11",
"vite": "5.2.12",
"vite-plugin-svgr": "4.2.0"
},
"devRemarks": {
Expand Down
2 changes: 2 additions & 0 deletions src/components/AuthAndDb.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { CorbadoProvider } from '@corbado/react'
import { ElectricProvider } from '../ElectricWrapper.tsx'
import { SqlInitializer } from './SqlInitializer/index.tsx'
import { Syncer } from './Syncer.tsx'
import { TreeOpenNodesSetter } from './TreeOpenNodesSetter.tsx'

import { Layout } from './LayoutProtected/index.tsx'

Expand All @@ -17,6 +18,7 @@ export const AuthAndDb = memo(() => {
<ElectricProvider>
<SqlInitializer />
<Syncer />
<TreeOpenNodesSetter />
<Layout />
</ElectricProvider>
</CorbadoProvider>
Expand Down
2 changes: 1 addition & 1 deletion src/components/Layout/Header/Menu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import { css } from '../../../css.ts'
export const Menu = memo(() => {
const navigate = useNavigate()

const onClickEnter = useCallback(() => navigate('/projects'), [navigate])
const onClickEnter = useCallback(() => navigate('/data/projects'), [navigate])

return (
<div style={controls}>
Expand Down
2 changes: 1 addition & 1 deletion src/components/LayoutProtected/Header/Menu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ export const Menu = memo(() => {
}, [appState?.app_state_id, navigate, params.user_email, searchParams])

const onClickLogout = useCallback(() => logout(), [logout])
const onClickEnter = useCallback(() => navigate('/projects'), [navigate])
const onClickEnter = useCallback(() => navigate('/data/projects'), [navigate])

const treeIsActive = tabs.includes('tree')
const dataIsActive = tabs.includes('data')
Expand Down
2 changes: 1 addition & 1 deletion src/components/LayoutProtected/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ export const Layout = memo(() => {
// const onlyForm = searchParams.get('onlyForm')
const onlyForm = false

console.log('hello Protected Layout')
// console.log('hello Protected Layout')

// Breadcrumbs and Navs are not protected because:
// - they are not (very) sensitive
Expand Down
4 changes: 2 additions & 2 deletions src/components/Syncer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ export const Syncer = () => {
// console.log('hello Syncer', { db, authUser })

useEffect(() => {
console.log('hello Syncer, syncing data for user:', authUser?.email)
// console.log('hello Syncer, syncing data for user:', authUser?.email)
const syncItems = async () => {
await db.app_states.update({
where: { user_email: authUser?.email },
Expand Down Expand Up @@ -238,7 +238,7 @@ export const Syncer = () => {
where: { user_email: authUser?.email },
data: { syncing: false },
})
console.log('hello Syncer, data synced')
// console.log('hello Syncer, data synced')
}

syncItems()
Expand Down
2 changes: 1 addition & 1 deletion src/components/TableLayersProvider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ export const TableLayersProvider = () => {
const newVectorLayer = await db.vector_layers.create({
data: vectorLayer,
})
console.error(
console.warn(
'hello TableLayersProvider, new places 1 vector layer:',
newVectorLayer,
)
Expand Down
40 changes: 12 additions & 28 deletions src/components/Tree/Account.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
import { useCallback, memo } from 'react'
import {
useLocation,
useParams,
useNavigate,
useSearchParams,
} from 'react-router-dom'
import { memo, useMemo } from 'react'
import { useLocation } from 'react-router-dom'
import isEqual from 'lodash/isEqual'

import { Node } from './Node.tsx'
import { Accounts as Account } from '../../../generated/client/index.ts'
Expand All @@ -15,39 +11,27 @@ interface Props {
}

export const AccountNode = memo(({ account, level = 2 }: Props) => {
const params = useParams()
const location = useLocation()
const navigate = useNavigate()
const [searchParams] = useSearchParams()

const urlPath = location.pathname.split('/').filter((p) => p !== '')
const isOpen =
urlPath[0] === 'accounts' && params.account_id === account.account_id
const isActive = isOpen && urlPath.length === 2
const ownArray = useMemo(
() => ['data', 'accounts', account.account_id],
[account.account_id],
)
const ownUrl = `/${ownArray.join('/')}`

const onClickButton = useCallback(() => {
if (isOpen)
return navigate({
pathname: '/accounts',
search: searchParams.toString(),
})
navigate({
pathname: `/accounts/${account.account_id}`,
search: searchParams.toString(),
})
}, [isOpen, navigate, account.account_id, searchParams])
const isInActiveNodeArray = ownArray.every((part, i) => urlPath[i] === part)
const isActive = isEqual(urlPath, ownArray)

return (
<Node
node={account}
id={account.account_id}
level={level}
isOpen={isOpen}
isInActiveNodeArray={isOpen}
isInActiveNodeArray={isInActiveNodeArray}
isActive={isActive}
childrenCount={0}
to={`/accounts/${account.account_id}`}
onClickButton={onClickButton}
to={ownUrl}
/>
)
})
63 changes: 56 additions & 7 deletions src/components/Tree/Accounts.tsx
Original file line number Diff line number Diff line change
@@ -1,15 +1,20 @@
import { useCallback, useMemo, memo } from 'react'
import { useLiveQuery } from 'electric-sql/react'
import { useLocation, useNavigate, useSearchParams } from 'react-router-dom'
import { useCorbado } from '@corbado/react'
import isEqual from 'lodash/isEqual'

import { useElectric } from '../../ElectricProvider.tsx'
import { Node } from './Node.tsx'
import { AccountNode } from './Account.tsx'
import { removeChildNodes } from '../../modules/tree/removeChildNodes.ts'
import { addOpenNodes } from '../../modules/tree/addOpenNodes.ts'

export const AccountsNode = memo(() => {
const location = useLocation()
const navigate = useNavigate()
const [searchParams] = useSearchParams()
const { user: authUser } = useCorbado()

const { db } = useElectric()!
const { results: accounts = [] } = useLiveQuery(
Expand All @@ -18,32 +23,76 @@ export const AccountsNode = memo(() => {
}),
)

const { results: appState } = useLiveQuery(
db.app_states.liveFirst({ where: { user_email: authUser?.email } }),
)
const openNodes = useMemo(
() => appState?.tree_open_nodes ?? [],
[appState?.tree_open_nodes],
)

const accountsNode = useMemo(
() => ({ label: `Accounts (${accounts.length})` }),
[accounts.length],
)

const urlPath = location.pathname.split('/').filter((p) => p !== '')
const isOpen = urlPath[0] === 'accounts'
const isActive = isOpen && urlPath.length === 1
const parentArray = useMemo(() => ['data'], [])
const parentUrl = `/${parentArray.join('/')}`
const ownArray = useMemo(() => [...parentArray, 'accounts'], [parentArray])
const ownUrl = `/${ownArray.join('/')}`

// needs to work not only works for urlPath, for all opened paths!
const isOpen = openNodes.some((array) => isEqual(array, ownArray))
const isInActiveNodeArray = ownArray.every((part, i) => urlPath[i] === part)
const isActive = isEqual(urlPath, ownArray)

const onClickButton = useCallback(() => {
if (isOpen) {
return navigate({ pathname: '/', search: searchParams.toString() })
removeChildNodes({
node: ownArray,
db,
appStateId: appState?.app_state_id,
isRoot: true,
})
// only navigate if urlPath includes ownArray
if (isInActiveNodeArray && ownArray.length <= urlPath.length) {
navigate({
pathname: parentUrl,
search: searchParams.toString(),
})
}
return
}
navigate({ pathname: '/accounts', search: searchParams.toString() })
}, [isOpen, navigate, searchParams])
// add to openNodes without navigating
addOpenNodes({
nodes: [ownArray],
db,
appStateId: appState?.app_state_id,
isRoot: true,
})
}, [
appState?.app_state_id,
db,
isInActiveNodeArray,
isOpen,
navigate,
ownArray,
parentUrl,
searchParams,
urlPath.length,
])

return (
<>
<Node
node={accountsNode}
level={1}
isOpen={isOpen}
isInActiveNodeArray={isOpen}
isInActiveNodeArray={isInActiveNodeArray}
isActive={isActive}
childrenCount={accounts.length}
to={`/accounts`}
to={ownUrl}
onClickButton={onClickButton}
/>
{isOpen &&
Expand Down
Loading