Skip to content

Commit 8e458c8

Browse files
committed
wip new table shizzle
1 parent 5aa6ecc commit 8e458c8

File tree

2 files changed

+138
-26
lines changed

2 files changed

+138
-26
lines changed

cms/App.tsx

Lines changed: 16 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import based from '@based/client'
55
import basedConfig from '../based.json'
66
import { useRoute } from 'kabouter'
77
import { styled } from 'inlines'
8-
import { Modal } from '@based/ui'
9-
import { Content } from './_Content'
8+
import { Modal, ScrollArea } from '@based/ui'
9+
import { Content } from './Components/Content'
1010
// import { FileLibrary } from './Files'
1111
import { Menu } from './Components/SideBar'
1212
import { SchemaBuilder } from './Components/Schema'
@@ -39,14 +39,7 @@ export const App = () => {
3939
return !authState.userId ? (
4040
<Login />
4141
) : (
42-
<styled.div
43-
style={{
44-
display: 'flex',
45-
flexDirection: 'column',
46-
minHeight: '100vh',
47-
backgroundColor: color('background', 'screen'),
48-
}}
49-
>
42+
<styled.div>
5043
<TopBar
5144
data={data}
5245
client={client}
@@ -61,21 +54,20 @@ export const App = () => {
6154
<>files</>
6255
) : section === 'schema-builder' ? (
6356
<SchemaBuilder />
64-
) : (
65-
// ) : section === 'profile' ? (
66-
// <Profile />
67-
// ) : section === 'user-management' ? (
68-
// <Management />
69-
// ) : section === 'db-settings' ? (
70-
// <DatabaseSettings />
71-
// ) : section === 'general-settings' ? (
72-
// <GeneralSettings languages={schema?.languages} />
73-
// ) : section === 'docs' ? (
74-
// <Docs />
75-
// ) : !section ? (
57+
) : // ) : section === 'profile' ? (
58+
// <Profile />
59+
// ) : section === 'user-management' ? (
60+
// <Management />
61+
// ) : section === 'db-settings' ? (
62+
// <DatabaseSettings />
63+
// ) : section === 'general-settings' ? (
64+
// <GeneralSettings languages={schema?.languages} />
65+
// ) : section === 'docs' ? (
66+
// <Docs />
67+
!section ? (
7668
<Dashboard />
77-
// ) : (
78-
// <Content selectedLang={selectedLang || schema?.languages[0]} />
69+
) : (
70+
<Content selectedLang={selectedLang || schema?.languages[0]} />
7971
)}
8072
</div>
8173
</styled.div>

cms/Components/Content/index.tsx

Lines changed: 122 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,125 @@
11
import React from 'react'
2+
import {
3+
Table,
4+
Dropdown,
5+
Modal,
6+
useInfiniteQuery,
7+
Button,
8+
IconMoreVertical,
9+
IconCopy,
10+
IconPlus,
11+
IconDelete,
12+
Page,
13+
Stack,
14+
Text,
15+
} from '@based/ui'
16+
import { useRoute } from 'kabouter'
17+
import { useClient } from '@based/react'
218

3-
export const Content = () => {
4-
return <>content viewer table</>
19+
export const Content = ({ selectedLang }) => {
20+
const route = useRoute('[section][id]')
21+
const routeSection = route.query.section
22+
23+
const client = useClient()
24+
25+
const [itemToDelete, setItemToDelete] = React.useState(null)
26+
const { data, fetchMore, setVisibleElements } = useInfiniteQuery({
27+
accessFn: (data) => data.files,
28+
queryFn: (offset) => ({
29+
$id: 'root',
30+
files: {
31+
$all: true,
32+
$list: {
33+
$sort: { $field: 'updatedAt', $order: 'desc' },
34+
$offset: offset,
35+
$limit: 25,
36+
$find: {
37+
$traverse: 'children',
38+
$filter: {
39+
$operator: '=',
40+
$field: 'type',
41+
$value: routeSection,
42+
},
43+
},
44+
},
45+
},
46+
}),
47+
})
48+
49+
console.log(data, 'NANI??', selectedLang)
50+
51+
return (
52+
<Page>
53+
<Stack style={{ marginBottom: 24 }}>
54+
<Text variant="title-page">{routeSection as string}</Text>
55+
<Button
56+
prefix={<IconPlus />}
57+
size="small"
58+
variant="primary-transparent"
59+
onClick={async () => {
60+
await client.call('db:set', {
61+
// TODO check this ? en default?
62+
$language: selectedLang,
63+
type: routeSection,
64+
})
65+
}}
66+
>
67+
Add new {routeSection as string}
68+
</Button>
69+
</Stack>
70+
71+
<Table
72+
data={data}
73+
onScrollToBottom={fetchMore}
74+
onVisibleElementsChange={setVisibleElements}
75+
rowAction={(row) => (
76+
<Dropdown.Root>
77+
<Dropdown.Trigger>
78+
<Button shape="square" variant="neutral-transparent">
79+
<IconMoreVertical />
80+
</Button>
81+
</Dropdown.Trigger>
82+
<Dropdown.Items>
83+
<Dropdown.Item icon={<IconCopy />}>Copy</Dropdown.Item>
84+
<Dropdown.Item
85+
icon={<IconDelete />}
86+
onClick={() => {
87+
setItemToDelete(row.id)
88+
}}
89+
>
90+
Delete
91+
</Dropdown.Item>
92+
</Dropdown.Items>
93+
</Dropdown.Root>
94+
)}
95+
/>
96+
97+
{itemToDelete && (
98+
<Modal.Root
99+
open
100+
onOpenChange={() => {
101+
setItemToDelete(null)
102+
}}
103+
>
104+
<Modal.Overlay>
105+
{({ close }) => (
106+
<>
107+
<Modal.Title description="Are you sure? This action cannot be undone.">
108+
Deleting item #{itemToDelete}
109+
</Modal.Title>
110+
<Modal.Actions>
111+
<Button onClick={close} variant="neutral">
112+
Cancel
113+
</Button>
114+
<Button onClick={close} variant="error">
115+
Delete
116+
</Button>
117+
</Modal.Actions>
118+
</>
119+
)}
120+
</Modal.Overlay>
121+
</Modal.Root>
122+
)}
123+
</Page>
124+
)
5125
}

0 commit comments

Comments
 (0)