@flexkit/desk 0.0.18 → 0.0.19
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/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
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
|
|
1
|
+
import'./index.css';import {Layout}from'lucide-react';import {find,propEq}from'ramda';import {useParams,useLocation,useAppContext,useGraphQLError,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 E(){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 x(){let{entity:t}=useParams(),{search:o}=useLocation(),a=new URLSearchParams(o).get("id"),{scope:f}=useAppContext(),{schemaErrorMessage:u}=useGraphQLError(),{projects:p,currentProjectId:P}=useConfig(),{schema:h}=find(propEq(P??"","projectId"))(p),n=getEntitySchema(h,t??""),y=useGridColumnsDefinition({attributesSchema:n?.attributes??[],actionsComponent:i=>pt({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}),T=useCallback(i=>{let S=s?.length??0;if(i&&d>0&&S>0){let{scrollHeight:A,scrollTop:L,clientHeight:I}=i;A-L-I<500&&!l&&S<d&&b({variables:{options:{offset:s?.length??0,limit:c}}});}},[d,s?.length,b,l]),v=Array(c).fill({}),w=dt(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:ut(n?.menu?.label??n?.plural??"")})]}),u?null:jsx(DataTable,{columns:l?w:y,data:l?v:s??[],entityName:n?.name??"",pageSize:c,onScroll:i=>{T(i.target);},toolbarComponent:i=>jsx(DataTableToolbar,{entityName:n?.name??"",table:i})}),jsx(Outlet,{})]})}function ut(t){return t.charAt(0).toUpperCase()+t.slice(1)}function pt({entityName:t,entityNamePlural:o,row:r}){return jsx(DataTableRowActions,{entityName:t,entityNamePlural:o,row:r})}function dt(t){return t.map(o=>({...o,cell:()=>jsx(Skeleton,{className:"fk-h-4 fk-w-full",style:{marginTop:"7px",marginBottom:"6px"}})}))}function N(){let{entity:t,id:o}=useParams();return jsxs("div",{className:"flex flex-col",children:["Edit ",t," with id: ",o]})}function Mt(){return {name:"flexkit.desk",contributes:{apps:[{name:"desk",icon:jsx(Layout,{strokeWidth:1.5}),title:"Desk",component:jsx(E,{}),routes:[{path:"list/:entity",component:jsx(x,{}),children:[{path:"edit/:id",component:jsx(N,{})}]}]}]}}}export{Mt 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 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"]}
|
|
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","schemaErrorMessage","useGraphQLError","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 useGraphQLError,\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 { schemaErrorMessage } = useGraphQLError();\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 {!schemaErrorMessage ? (\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 ) : null}\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,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flexkit/desk",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.19",
|
|
4
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
5
|
"keywords": [
|
|
6
6
|
"flexkit",
|
|
@@ -53,8 +53,8 @@
|
|
|
53
53
|
"tailwindcss": "3.4.10",
|
|
54
54
|
"tsup": "8.5.1",
|
|
55
55
|
"typescript": "^5.3.3",
|
|
56
|
-
"@flexkit/studio": "0.0.18",
|
|
57
56
|
"eslint-config-custom": "0.0.0",
|
|
57
|
+
"@flexkit/studio": "0.0.19",
|
|
58
58
|
"tailwind-config": "0.0.1",
|
|
59
59
|
"tsconfig": "0.0.0"
|
|
60
60
|
},
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
"peerDependencies": {
|
|
68
68
|
"react": "^18.0.0 || ^19.0.0",
|
|
69
69
|
"react-dom": "^18.0.0 || ^19.0.0",
|
|
70
|
-
"@flexkit/studio": "0.0.
|
|
70
|
+
"@flexkit/studio": "0.0.19"
|
|
71
71
|
},
|
|
72
72
|
"publishConfig": {
|
|
73
73
|
"access": "public"
|