@flexkit/desk 0.0.6 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +74 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +19 -8
package/README.md
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
<a href="https://flexkit.io">
|
|
3
|
+
<picture>
|
|
4
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://flexkit.io/public/logos/icon-dark-background.png">
|
|
5
|
+
<img alt="Flexkit logo" src="https://flexkit.io/public/logos/icon-light-background.png" height="128">
|
|
6
|
+
</picture>
|
|
7
|
+
</a>
|
|
8
|
+
<h1>Flexkit Desk</h1>
|
|
9
|
+
|
|
10
|
+
<a href="https://www.npmjs.com/package/@flexkit/desk"><img alt="NPM version" src="https://img.shields.io/npm/v/%40flexkit%2Fdesk?style=for-the-badge&labelColor=%23000000&color=%232563eb"></a>
|
|
11
|
+
<a href="https://github.com/flexkit-io/flexkit/blob/main/LICENSE"><img alt="License" src="https://img.shields.io/npm/l/%40flexkit%2Fdesk?style=for-the-badge&labelColor=%23000000&color=%230ccf6a"></a>
|
|
12
|
+
<a href="https://github.com/orgs/flexkit-io/discussions"><img alt="Join the community on GitHub" src="https://img.shields.io/badge/Join%20the%20comunity-blue.svg?style=for-the-badge&logo=data:image/svg%2bxml;base64,PHN2ZyBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgNDggNDgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTcgOEg0MVY0MEg3VjhaIiBmaWxsPSIjMDIwODE3Ij48L3BhdGg+PHBhdGggZD0iTTI0IDBDNDIgMCA0OCA2IDQ4IDI0QzQ4IDQyIDQyIDQ4IDI0IDQ4QzYgNDggMCA0MiAwIDI0QzAgNiA2IDAgMjQgMFpNMTcuNzQ5NCA5LjUyMzgxSDguNzYxOUwxOS4yODMzIDIzLjgzMTNMOC43NjE5IDM4LjcwNzhIMTcuNzQ5NEwyMS4wNDk5IDMzLjY2MzlWMTQuMjU0OUwxNy43NDk0IDkuNTIzODFaTTM4Ljk1NzcgOS41MjM4MUgyOS45NTQyTDI2LjI4NTcgMTQuODIyOVYzMy4wNDA2TDI5Ljk1NDIgMzguNzA3OEgzOC45NTc3TDI4LjM5MDggMjMuODMxM0wzOC45NTc3IDkuNTIzODFaIiBmaWxsPSJ3aGl0ZSI+PC9wYXRoPjwvc3ZnPg==&labelColor=%23000000"></a>
|
|
13
|
+
|
|
14
|
+
</div>
|
|
15
|
+
|
|
16
|
+
**A plugin for Flexkit Studio that that powers the Desk experience, enabling developers and teams to browse entities, manage attributes, and perform CRUD operations on structured business data.**
|
|
17
|
+
|
|
18
|
+
## Features
|
|
19
|
+
|
|
20
|
+
- Browse entities and their attributes
|
|
21
|
+
- Perform CRUD operations on entities
|
|
22
|
+
- Manage attributes of entities
|
|
23
|
+
- Manage relationships between entities
|
|
24
|
+
- Manage views of entities
|
|
25
|
+
- Manage filters on entities
|
|
26
|
+
- Manage sorts on entities
|
|
27
|
+
|
|
28
|
+

|
|
29
|
+
|
|
30
|
+
## Installation
|
|
31
|
+
|
|
32
|
+
```shell
|
|
33
|
+
npm install @flexkit/desk
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Configuring
|
|
37
|
+
|
|
38
|
+
```ts
|
|
39
|
+
// `flexkit.config.ts`:
|
|
40
|
+
import { defineConfig } from '@flexkit/studio';
|
|
41
|
+
import { Desk } from '@flexkit/desk';
|
|
42
|
+
|
|
43
|
+
export default defineConfig({
|
|
44
|
+
plugins: [Desk()],
|
|
45
|
+
});
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Contributing
|
|
49
|
+
|
|
50
|
+
Contributions to Flexkit are welcome and highly appreciated. However, before you jump right into it, we would like you to review our [Contribution Guidelines](/contributing.md) to make sure you have a smooth experience contributing to Flexkit.
|
|
51
|
+
|
|
52
|
+
## Reporting Issues
|
|
53
|
+
|
|
54
|
+
Found a bug? Have a feature request?
|
|
55
|
+
|
|
56
|
+
Open an issue with:
|
|
57
|
+
• Repro steps
|
|
58
|
+
• Expected vs actual behavior
|
|
59
|
+
• Screenshots when helpful
|
|
60
|
+
• Schema snippet (if relevant)
|
|
61
|
+
|
|
62
|
+
## License
|
|
63
|
+
|
|
64
|
+
This project is licensed under the **MIT license**.
|
|
65
|
+
|
|
66
|
+
See [LICENSE](https://github.com/flexkit-io/flexkit/blob/main/LICENSE) for more information.
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Security
|
|
71
|
+
|
|
72
|
+
If you believe you have found a security vulnerability in Flexkit, we encourage you to **_responsibly disclose this and NOT open a public issue_**.
|
|
73
|
+
|
|
74
|
+
Please email us at security@flexkit.io to report any security vulnerabilities.
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {Layout}from'lucide-react';import {find,propEq}from'ramda';import {useParams,useLocation,useAppContext,useConfig,getEntitySchema,useEntityQuery,ProjectDisabled,SchemaError,Outlet,useAuth}from'@flexkit/studio';import {Tooltip,TooltipTrigger,SidebarTrigger,TooltipContent,Separator,SidebarProvider,Sidebar,SidebarInset,Skeleton}from'@flexkit/studio/ui';import {jsx,jsxs}from'react/jsx-runtime';import {useCallback}from'react';
|
|
1
|
+
import'./index.css';import {Layout}from'lucide-react';import {find,propEq}from'ramda';import {useParams,useLocation,useAppContext,useConfig,getEntitySchema,useGridColumnsDefinition,useEntityQuery,ProjectDisabled,SchemaError,DataTable,DataTableToolbar,Outlet,useAuth,DataTableRowActions}from'@flexkit/studio';import {Tooltip,TooltipTrigger,SidebarTrigger,TooltipContent,Separator,SidebarProvider,Sidebar,SidebarInset,Skeleton}from'@flexkit/studio/ui';import {jsx,jsxs}from'react/jsx-runtime';import {useCallback}from'react';var H="flexkit:sidebar:state";function x(){let[,t]=useAuth(),{projects:o,currentProjectId:r}=useConfig(),{schema:a,menuGroups:f}=find(propEq(r??"","projectId"))(o),u=document.cookie.split("; ").find(p=>p.startsWith(`${H}=`))?.split("=")[1]!=="false";return jsxs(SidebarProvider,{defaultOpen:u,children:[jsx(Sidebar,{schema:a,menuGroups:f}),jsx(SidebarInset,{children:jsx(Outlet,{})})]})}var c=25;function N(){let{entity:t}=useParams(),{search:o}=useLocation(),a=new URLSearchParams(o).get("id"),{scope:f}=useAppContext(),{projects:u,currentProjectId:p}=useConfig(),{schema:h}=find(propEq(p??"","projectId"))(u),n=getEntitySchema(h,t??""),y=useGridColumnsDefinition({attributesSchema:n?.attributes??[],actionsComponent:i=>ft({entityName:n?.name??"",entityNamePlural:t??"",row:i}),checkboxSelect:"multiple"}),C=a?{where:{_id:a}}:{options:{offset:0,limit:c}},{isLoading:l,fetchMore:b,count:d,data:s,isProjectDisabled:D}=useEntityQuery({entityNamePlural:t??"",schema:h,scope:f,variables:C}),E=useCallback(i=>{let S=s?.length??0;if(i&&d>0&&S>0){let{scrollHeight:w,scrollTop:A,clientHeight:I}=i;w-A-I<500&&!l&&S<d&&b({variables:{options:{offset:s?.length??0,limit:c}}});}},[d,s?.length,b,l]),T=Array(c).fill({}),v=ut(y);return D?jsx("div",{className:"fk-flex fk-flex-col fk-h-full fk-px-4 fk-py-3",children:jsx(ProjectDisabled,{})}):jsxs("div",{className:"fk-flex fk-flex-col fk-h-full fk-px-4 fk-py-3",children:[jsx(SchemaError,{}),jsxs("div",{className:"fk-flex fk-items-center fk-mb-4 fk-gap-2",children:[jsxs(Tooltip,{children:[jsx(TooltipTrigger,{asChild:true,children:jsx(SidebarTrigger,{className:"-fk-ml-1 fk-w-4 fk-h-4"})}),jsx(TooltipContent,{children:"Toggle Sidebar"})]}),jsx(Separator,{orientation:"vertical",className:"fk-h-4"}),jsx("h2",{className:"fk-text-lg fk-font-semibold fk-leading-none fk-tracking-tight",children:mt(n?.menu?.label??n?.plural??"")})]}),jsx(DataTable,{columns:l?v:y,data:l?T:s??[],entityName:n?.name??"",pageSize:c,onScroll:i=>{E(i.target);},toolbarComponent:i=>jsx(DataTableToolbar,{entityName:n?.name??"",table:i})}),jsx(Outlet,{})]})}function mt(t){return t.charAt(0).toUpperCase()+t.slice(1)}function ft({entityName:t,entityNamePlural:o,row:r}){return jsx(DataTableRowActions,{entityName:t,entityNamePlural:o,row:r})}function ut(t){return t.map(o=>({...o,cell:()=>jsx(Skeleton,{className:"fk-h-4 fk-w-full",style:{marginTop:"7px",marginBottom:"6px"}})}))}function P(){let{entity:t,id:o}=useParams();return jsxs("div",{className:"flex flex-col",children:["Edit ",t," with id: ",o]})}function jt(){return {name:"flexkit.desk",contributes:{apps:[{name:"desk",icon:jsx(Layout,{strokeWidth:1.5}),title:"Desk",component:jsx(x,{}),routes:[{path:"list/:entity",component:jsx(N,{}),children:[{path:"edit/:id",component:jsx(P,{})}]}]}]}}}export{jt as Desk};//# sourceMappingURL=index.js.map
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/root.tsx","../src/list.tsx","../src/edit-entity.tsx","../src/index.tsx"],"names":["SIDEBAR_COOKIE_NAME","Root","auth","useAuth","projects","currentProjectId","useConfig","schema","menuGroups","find","propEq","defaultOpen","row","jsxs","SidebarProvider","jsx","Sidebar","SidebarInset","Outlet","pageSize","List","entityName","useParams","search","useLocation","entityId","scope","useAppContext","entitySchema","getEntitySchema","columnsDefinition","useGridColumnsDefinition","dataRowActions","variables","isLoading","fetchMore","count","data","isProjectDisabled","useEntityQuery","fetchMoreOnBottomReached","useCallback","containerRefElement","rowsCount","scrollHeight","scrollTop","clientHeight","loadingData","loadingColumns","getLoadingColumns","ProjectDisabled","SchemaError","Tooltip","TooltipTrigger","SidebarTrigger","TooltipContent","Separator","capitalize","DataTable","e","table","DataTableToolbar","str","entityNamePlural","DataTableRowActions","columns","column","Skeleton","EditEntity","entity","id","Desk","LayoutIcon"],"mappings":"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","file":"index.js","sourcesContent":["import { find, propEq } from 'ramda';\nimport { Outlet, useAuth, useConfig } from '@flexkit/studio';\nimport { Sidebar, SidebarInset, SidebarProvider } from '@flexkit/studio/ui';\nimport type { SingleProject } from '@flexkit/studio';\n\nconst SIDEBAR_COOKIE_NAME = 'flexkit:sidebar:state';\n\nexport function Root(): JSX.Element {\n const [, auth] = useAuth();\n const { projects, currentProjectId } = useConfig();\n const { schema, menuGroups } = find(propEq(currentProjectId ?? '', 'projectId'))(projects) as SingleProject;\n const defaultOpen =\n document.cookie\n .split('; ')\n .find((row) => row.startsWith(`${SIDEBAR_COOKIE_NAME}=`))\n ?.split('=')[1] !== 'false';\n\n return (\n <SidebarProvider defaultOpen={defaultOpen}>\n <Sidebar schema={schema} menuGroups={menuGroups} />\n <SidebarInset>\n <Outlet />\n </SidebarInset>\n </SidebarProvider>\n );\n}\n","import { useCallback } from 'react';\nimport { find, propEq } from 'ramda';\nimport {\n getEntitySchema,\n useAppContext,\n useConfig,\n useLocation,\n useParams,\n Outlet,\n useEntityQuery,\n ProjectDisabled,\n SchemaError,\n} from '@flexkit/studio';\nimport { Skeleton, SidebarTrigger, Separator, Tooltip, TooltipContent, TooltipTrigger } from '@flexkit/studio/ui';\nimport type { ColumnDef, SingleProject, Row } from '@flexkit/studio';\nimport { DataTable, DataTableRowActions, DataTableToolbar, useGridColumnsDefinition } from '@flexkit/studio/data-grid';\n\nconst pageSize = 25;\n\nexport function List(): JSX.Element {\n const { entity: entityName } = useParams();\n const { search } = useLocation();\n const query = new URLSearchParams(search);\n const entityId = query.get('id');\n const { scope } = useAppContext();\n const { projects, currentProjectId } = useConfig();\n const { schema } = find(propEq(currentProjectId ?? '', 'projectId'))(projects) as SingleProject;\n const entitySchema = getEntitySchema(schema, entityName ?? '');\n const columnsDefinition = useGridColumnsDefinition({\n attributesSchema: entitySchema?.attributes ?? [],\n actionsComponent: (row) =>\n dataRowActions({ entityName: entitySchema?.name ?? '', entityNamePlural: entityName ?? '', row }),\n checkboxSelect: 'multiple',\n });\n\n const variables = entityId ? { where: { _id: entityId } } : { options: { offset: 0, limit: pageSize } };\n\n const { isLoading, fetchMore, count, data, isProjectDisabled } = useEntityQuery({\n entityNamePlural: entityName ?? '',\n schema,\n scope,\n variables,\n });\n\n // called on scroll and possibly on mount to fetch more data as the user scrolls and reaches bottom of table\n const fetchMoreOnBottomReached = useCallback(\n (containerRefElement?: HTMLDivElement | null) => {\n const rowsCount = data?.length ?? 0;\n\n if (containerRefElement && count > 0 && rowsCount > 0) {\n const { scrollHeight, scrollTop, clientHeight } = containerRefElement;\n //once the user has scrolled within 500px of the bottom of the table, fetch more data if we can\n if (scrollHeight - scrollTop - clientHeight < 500 && !isLoading && rowsCount < count) {\n fetchMore({\n variables: {\n options: {\n offset: data?.length ?? 0,\n limit: pageSize,\n },\n },\n });\n }\n }\n },\n [count, data?.length, fetchMore, isLoading]\n );\n\n const loadingData = Array(pageSize).fill({});\n const loadingColumns = getLoadingColumns(columnsDefinition);\n\n if (isProjectDisabled) {\n return (\n <div className=\"fk-flex fk-flex-col fk-h-full fk-px-4 fk-py-3\">\n <ProjectDisabled />\n </div>\n );\n }\n\n return (\n <div className=\"fk-flex fk-flex-col fk-h-full fk-px-4 fk-py-3\">\n <SchemaError />\n <div className=\"fk-flex fk-items-center fk-mb-4 fk-gap-2\">\n <Tooltip>\n <TooltipTrigger asChild>\n <SidebarTrigger className=\"-fk-ml-1 fk-w-4 fk-h-4\" />\n </TooltipTrigger>\n <TooltipContent>Toggle Sidebar</TooltipContent>\n </Tooltip>\n <Separator orientation=\"vertical\" className=\"fk-h-4\" />\n <h2 className=\"fk-text-lg fk-font-semibold fk-leading-none fk-tracking-tight\">\n {capitalize(entitySchema?.menu?.label ?? entitySchema?.plural ?? '')}\n </h2>\n </div>\n <DataTable\n columns={isLoading ? loadingColumns : columnsDefinition}\n data={isLoading ? loadingData : (data ?? [])}\n entityName={entitySchema?.name ?? ''}\n pageSize={pageSize}\n onScroll={(e) => {\n fetchMoreOnBottomReached(e.target as HTMLDivElement);\n }}\n toolbarComponent={(table) => <DataTableToolbar entityName={entitySchema?.name ?? ''} table={table} />}\n />\n <Outlet />\n </div>\n );\n}\n\nfunction capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\ntype AttributeValue = {\n _id: string;\n [key: string]: string | AttributeValue | null;\n __typename: string;\n};\n\ntype DataRowActions = {\n entityName: string;\n entityNamePlural: string;\n row: Row<AttributeValue>;\n};\n\nfunction dataRowActions({ entityName, entityNamePlural, row }: DataRowActions): JSX.Element {\n return <DataTableRowActions entityName={entityName} entityNamePlural={entityNamePlural} row={row} />;\n}\n\nfunction getLoadingColumns(columns: object[]): ColumnDef<AttributeValue>[] {\n return columns.map((column) => ({\n ...column,\n cell: () => <Skeleton className=\"fk-h-4 fk-w-full\" style={{ marginTop: '7px', marginBottom: '6px' }} />,\n })) as unknown as ColumnDef<AttributeValue>[];\n}\n","import { useParams } from '@flexkit/studio';\n\nexport function EditEntity(): JSX.Element {\n const { entity, id } = useParams();\n\n // Not used, left here as an example of how to nest routes in plugins (see ./index.tsx file)\n return (\n <div className=\"flex flex-col\">\n Edit {entity} with id: {id}\n </div>\n );\n}\n","import { Layout as LayoutIcon } from 'lucide-react';\nimport type { PluginOptions } from '@flexkit/studio';\nimport { Root } from './root';\nimport { List } from './list';\nimport { EditEntity } from './edit-entity';\n\nexport function Desk(): PluginOptions {\n return {\n name: 'flexkit.desk',\n contributes: {\n apps: [\n {\n name: 'desk',\n icon: <LayoutIcon strokeWidth={1.5} />,\n title: 'Desk',\n component: <Root />,\n routes: [\n {\n path: 'list/:entity',\n component: <List />,\n children: [\n {\n path: 'edit/:id',\n component: <EditEntity />, // Not used, left here as an example of how to nest routes in plugins\n },\n ],\n },\n ],\n },\n ],\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/root.tsx","../src/list.tsx","../src/edit-entity.tsx","../src/index.tsx"],"names":["SIDEBAR_COOKIE_NAME","Root","auth","useAuth","projects","currentProjectId","useConfig","schema","menuGroups","find","propEq","defaultOpen","row","jsxs","SidebarProvider","jsx","Sidebar","SidebarInset","Outlet","pageSize","List","entityName","useParams","search","useLocation","entityId","scope","useAppContext","entitySchema","getEntitySchema","columnsDefinition","useGridColumnsDefinition","dataRowActions","variables","isLoading","fetchMore","count","data","isProjectDisabled","useEntityQuery","fetchMoreOnBottomReached","useCallback","containerRefElement","rowsCount","scrollHeight","scrollTop","clientHeight","loadingData","loadingColumns","getLoadingColumns","ProjectDisabled","SchemaError","Tooltip","TooltipTrigger","SidebarTrigger","TooltipContent","Separator","capitalize","DataTable","e","table","DataTableToolbar","str","entityNamePlural","DataTableRowActions","columns","column","Skeleton","EditEntity","entity","id","Desk","LayoutIcon"],"mappings":"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","file":"index.js","sourcesContent":["import { find, propEq } from 'ramda';\nimport { Outlet, useAuth, useConfig } from '@flexkit/studio';\nimport { Sidebar, SidebarInset, SidebarProvider } from '@flexkit/studio/ui';\nimport type { SingleProject } from '@flexkit/studio';\n\nconst SIDEBAR_COOKIE_NAME = 'flexkit:sidebar:state';\n\nexport function Root(): JSX.Element {\n const [, auth] = useAuth();\n const { projects, currentProjectId } = useConfig();\n const { schema, menuGroups } = find(propEq(currentProjectId ?? '', 'projectId'))(projects) as SingleProject;\n const defaultOpen =\n document.cookie\n .split('; ')\n .find((row) => row.startsWith(`${SIDEBAR_COOKIE_NAME}=`))\n ?.split('=')[1] !== 'false';\n\n return (\n <SidebarProvider defaultOpen={defaultOpen}>\n <Sidebar schema={schema} menuGroups={menuGroups} />\n <SidebarInset>\n <Outlet />\n </SidebarInset>\n </SidebarProvider>\n );\n}\n","import { useCallback } from 'react';\nimport { find, propEq } from 'ramda';\nimport {\n getEntitySchema,\n useAppContext,\n useConfig,\n useLocation,\n useParams,\n Outlet,\n useEntityQuery,\n ProjectDisabled,\n SchemaError,\n DataTable,\n DataTableRowActions,\n DataTableToolbar,\n useGridColumnsDefinition,\n} from '@flexkit/studio';\nimport { Skeleton, SidebarTrigger, Separator, Tooltip, TooltipContent, TooltipTrigger } from '@flexkit/studio/ui';\nimport type { ColumnDef, SingleProject, Row } from '@flexkit/studio';\n\nconst pageSize = 25;\n\nexport function List(): JSX.Element {\n const { entity: entityName } = useParams();\n const { search } = useLocation();\n const query = new URLSearchParams(search);\n const entityId = query.get('id');\n const { scope } = useAppContext();\n const { projects, currentProjectId } = useConfig();\n const { schema } = find(propEq(currentProjectId ?? '', 'projectId'))(projects) as SingleProject;\n const entitySchema = getEntitySchema(schema, entityName ?? '');\n const columnsDefinition = useGridColumnsDefinition({\n attributesSchema: entitySchema?.attributes ?? [],\n actionsComponent: (row) =>\n dataRowActions({ entityName: entitySchema?.name ?? '', entityNamePlural: entityName ?? '', row }),\n checkboxSelect: 'multiple',\n });\n\n const variables = entityId ? { where: { _id: entityId } } : { options: { offset: 0, limit: pageSize } };\n\n const { isLoading, fetchMore, count, data, isProjectDisabled } = useEntityQuery({\n entityNamePlural: entityName ?? '',\n schema,\n scope,\n variables,\n });\n\n // called on scroll and possibly on mount to fetch more data as the user scrolls and reaches bottom of table\n const fetchMoreOnBottomReached = useCallback(\n (containerRefElement?: HTMLDivElement | null) => {\n const rowsCount = data?.length ?? 0;\n\n if (containerRefElement && count > 0 && rowsCount > 0) {\n const { scrollHeight, scrollTop, clientHeight } = containerRefElement;\n //once the user has scrolled within 500px of the bottom of the table, fetch more data if we can\n if (scrollHeight - scrollTop - clientHeight < 500 && !isLoading && rowsCount < count) {\n fetchMore({\n variables: {\n options: {\n offset: data?.length ?? 0,\n limit: pageSize,\n },\n },\n });\n }\n }\n },\n [count, data?.length, fetchMore, isLoading]\n );\n\n const loadingData = Array(pageSize).fill({});\n const loadingColumns = getLoadingColumns(columnsDefinition);\n\n if (isProjectDisabled) {\n return (\n <div className=\"fk-flex fk-flex-col fk-h-full fk-px-4 fk-py-3\">\n <ProjectDisabled />\n </div>\n );\n }\n\n return (\n <div className=\"fk-flex fk-flex-col fk-h-full fk-px-4 fk-py-3\">\n <SchemaError />\n <div className=\"fk-flex fk-items-center fk-mb-4 fk-gap-2\">\n <Tooltip>\n <TooltipTrigger asChild>\n <SidebarTrigger className=\"-fk-ml-1 fk-w-4 fk-h-4\" />\n </TooltipTrigger>\n <TooltipContent>Toggle Sidebar</TooltipContent>\n </Tooltip>\n <Separator orientation=\"vertical\" className=\"fk-h-4\" />\n <h2 className=\"fk-text-lg fk-font-semibold fk-leading-none fk-tracking-tight\">\n {capitalize(entitySchema?.menu?.label ?? entitySchema?.plural ?? '')}\n </h2>\n </div>\n <DataTable\n columns={isLoading ? loadingColumns : columnsDefinition}\n data={isLoading ? loadingData : (data ?? [])}\n entityName={entitySchema?.name ?? ''}\n pageSize={pageSize}\n onScroll={(e) => {\n fetchMoreOnBottomReached(e.target as HTMLDivElement);\n }}\n toolbarComponent={(table) => <DataTableToolbar entityName={entitySchema?.name ?? ''} table={table} />}\n />\n <Outlet />\n </div>\n );\n}\n\nfunction capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\ntype AttributeValue = {\n _id: string;\n [key: string]: string | AttributeValue | null;\n __typename: string;\n};\n\ntype DataRowActions = {\n entityName: string;\n entityNamePlural: string;\n row: Row<AttributeValue>;\n};\n\nfunction dataRowActions({ entityName, entityNamePlural, row }: DataRowActions): JSX.Element {\n return <DataTableRowActions entityName={entityName} entityNamePlural={entityNamePlural} row={row} />;\n}\n\nfunction getLoadingColumns(columns: object[]): ColumnDef<AttributeValue>[] {\n return columns.map((column) => ({\n ...column,\n cell: () => <Skeleton className=\"fk-h-4 fk-w-full\" style={{ marginTop: '7px', marginBottom: '6px' }} />,\n })) as unknown as ColumnDef<AttributeValue>[];\n}\n","import { useParams } from '@flexkit/studio';\n\nexport function EditEntity(): JSX.Element {\n const { entity, id } = useParams();\n\n // Not used, left here as an example of how to nest routes in plugins (see ./index.tsx file)\n return (\n <div className=\"flex flex-col\">\n Edit {entity} with id: {id}\n </div>\n );\n}\n","import { Layout as LayoutIcon } from 'lucide-react';\nimport type { PluginOptions } from '@flexkit/studio';\nimport { Root } from './root';\nimport { List } from './list';\nimport { EditEntity } from './edit-entity';\n\nexport function Desk(): PluginOptions {\n return {\n name: 'flexkit.desk',\n contributes: {\n apps: [\n {\n name: 'desk',\n icon: <LayoutIcon strokeWidth={1.5} />,\n title: 'Desk',\n component: <Root />,\n routes: [\n {\n path: 'list/:entity',\n component: <List />,\n children: [\n {\n path: 'edit/:id',\n component: <EditEntity />, // Not used, left here as an example of how to nest routes in plugins\n },\n ],\n },\n ],\n },\n ],\n },\n };\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flexkit/desk",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.7",
|
|
4
|
+
"description": "Core Flexkit Studio plugin that powers the main interface for browsing entities, managing attributes, and performing CRUD operations on structured business data.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"flexkit",
|
|
7
|
+
"studio",
|
|
8
|
+
"react",
|
|
9
|
+
"node",
|
|
10
|
+
"desk",
|
|
11
|
+
"flexkit-plugin"
|
|
12
|
+
],
|
|
4
13
|
"type": "module",
|
|
5
14
|
"main": "./dist/index.js",
|
|
6
15
|
"style": "dist/index.css",
|
|
7
|
-
"module": "./dist/index.
|
|
16
|
+
"module": "./dist/index.js",
|
|
8
17
|
"types": "./dist/index.d.ts",
|
|
9
18
|
"license": "MIT",
|
|
10
19
|
"repository": {
|
|
@@ -25,7 +34,9 @@
|
|
|
25
34
|
]
|
|
26
35
|
}
|
|
27
36
|
},
|
|
28
|
-
"sideEffects":
|
|
37
|
+
"sideEffects": [
|
|
38
|
+
"**/*.css"
|
|
39
|
+
],
|
|
29
40
|
"files": [
|
|
30
41
|
"dist/**"
|
|
31
42
|
],
|
|
@@ -42,28 +53,28 @@
|
|
|
42
53
|
"tailwindcss": "3.4.10",
|
|
43
54
|
"tsup": "8.5.0",
|
|
44
55
|
"typescript": "^5.3.3",
|
|
56
|
+
"@flexkit/studio": "0.0.7",
|
|
45
57
|
"eslint-config-custom": "0.0.0",
|
|
46
58
|
"tailwind-config": "0.0.1",
|
|
47
|
-
"@flexkit/studio": "0.0.6",
|
|
48
59
|
"tsconfig": "0.0.0"
|
|
49
60
|
},
|
|
50
61
|
"dependencies": {
|
|
51
62
|
"debug": "^4.3.4",
|
|
52
|
-
"lucide-react": "0.
|
|
63
|
+
"lucide-react": "0.555.0",
|
|
53
64
|
"ramda": "^0.29.1",
|
|
54
65
|
"swr": "^2.2.4"
|
|
55
66
|
},
|
|
56
67
|
"peerDependencies": {
|
|
57
68
|
"react": "^18.0.0 || ^19.0.0",
|
|
58
69
|
"react-dom": "^18.0.0 || ^19.0.0",
|
|
59
|
-
"@flexkit/studio": "0.0.
|
|
70
|
+
"@flexkit/studio": "0.0.7"
|
|
60
71
|
},
|
|
61
72
|
"publishConfig": {
|
|
62
73
|
"access": "public"
|
|
63
74
|
},
|
|
64
75
|
"scripts": {
|
|
65
|
-
"build": "tsup src/index.tsx --format esm --dts --external react
|
|
66
|
-
"dev": "
|
|
76
|
+
"build": "tailwindcss -i ./src/styles.css -o dist/index.css && tsup src/index.tsx --format esm --dts --external react",
|
|
77
|
+
"dev": "tailwindcss -i ./src/styles.css -o ./dist/index.css --watch & tsup src/index.tsx --format esm --watch --dts --external react",
|
|
67
78
|
"lint": "eslint \"src/**/*.ts*\"",
|
|
68
79
|
"clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist"
|
|
69
80
|
}
|