diff --git a/apps/nextjs-app/src/features/app/blocks/base/base-side-bar/BaseNodeTree.tsx b/apps/nextjs-app/src/features/app/blocks/base/base-side-bar/BaseNodeTree.tsx index 01def5114e..7a3d4d5ace 100644 --- a/apps/nextjs-app/src/features/app/blocks/base/base-side-bar/BaseNodeTree.tsx +++ b/apps/nextjs-app/src/features/app/blocks/base/base-side-bar/BaseNodeTree.tsx @@ -5,6 +5,7 @@ import type { IBaseNodeVo, IDuplicateBaseNodeRo, IBaseNodeWorkflowResourceMeta, + IBaseNodeAppResourceMeta, } from '@teable/openapi'; import { BaseNodeResourceType } from '@teable/openapi'; import { LocalStorageKeys, ReactQueryKeys } from '@teable/sdk/config'; @@ -146,6 +147,7 @@ export const BaseNodeTree = (props: IBaseNodeTreeProps) => { const canCreateWorkflow = !isCommunity && Boolean(permission?.['automation|create']); const canCreateApp = !isCommunity && Boolean(buildAppEnabled && permission?.['app|create']); const canCreateFolder = Boolean(permission?.['base|update']); + const canUpdateTable = Boolean(permission?.['table|update']); const canCreateResource = isEditMode && @@ -558,26 +560,40 @@ export const BaseNodeTree = (props: IBaseNodeTreeProps) => { } return ( // eslint-disable-next-line jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events -
e.stopPropagation()}> +
e.stopPropagation()} + > {resourceType === BaseNodeResourceType.Table && ( curdHooks.updateNode(nodeId, { icon })} + disabled={!canUpdateTable} > - {icon ? ( - - ) : ( - - )} + {icon ? : } )} - {resourceType !== BaseNodeResourceType.Table && ( - - )} + {resourceType !== BaseNodeResourceType.Table && }
); }; + const ItemStatus = ({ item }: { item: ItemInstance }) => { + const node = item.getItemData(); + if (!node) return null; + const { resourceType, resourceMeta } = node; + const isWorkflowActive = + resourceType === BaseNodeResourceType.Workflow && + (resourceMeta as IBaseNodeWorkflowResourceMeta)?.isActive; + const isAppPublished = + resourceType === BaseNodeResourceType.App && + (resourceMeta as IBaseNodeAppResourceMeta)?.publicUrl; + if (isWorkflowActive || isAppPublished) { + return ; + } + return null; + }; + const renderEmpty = () => { if (isLoading) { return ( @@ -674,10 +690,8 @@ export const BaseNodeTree = (props: IBaseNodeTreeProps) => { > {item.getItemName()} - {node.resourceType === BaseNodeResourceType.Workflow && - (node.resourceMeta as IBaseNodeWorkflowResourceMeta)?.isActive && ( - - )} + +
{ // eslint-disable-next-line jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events diff --git a/apps/nextjs-app/src/features/app/blocks/base/base-side-bar/QuickAction.tsx b/apps/nextjs-app/src/features/app/blocks/base/base-side-bar/QuickAction.tsx index ec6968b4be..563acd28c2 100644 --- a/apps/nextjs-app/src/features/app/blocks/base/base-side-bar/QuickAction.tsx +++ b/apps/nextjs-app/src/features/app/blocks/base/base-side-bar/QuickAction.tsx @@ -111,11 +111,13 @@ export const QuickAction = ({ children }: React.PropsWithChildren) => { } }} > - {icon ? ( - - ) : IconComponent ? ( - - ) : null} +
+ {icon ? ( + + ) : IconComponent ? ( + + ) : null} +
{name} ); diff --git a/packages/openapi/src/base-node/types.ts b/packages/openapi/src/base-node/types.ts index 90c3f89a71..6c03fb7549 100644 --- a/packages/openapi/src/base-node/types.ts +++ b/packages/openapi/src/base-node/types.ts @@ -23,7 +23,10 @@ export const baseNodeTableResourceMetaSchema = defaultResourceMetaSchema.extend( export type IBaseNodeTableResourceMeta = z.infer; -export const baseNodeAppResourceMetaSchema = defaultResourceMetaSchema; +export const baseNodeAppResourceMetaSchema = defaultResourceMetaSchema.extend({ + publicUrl: z.string().nullable().optional(), + publishedVersion: z.number().nullable().optional(), +}); export type IBaseNodeAppResourceMeta = z.infer;