gchust ae6b801132
feat: new block template plugin (#5920)
* feat: new block template plugin

* fix: build error

* fix: support nested template in blocks

* fix: remove undefined x-component properties from schema during template processing [skip ci]

* feat: reset action for template block

* fix: skip dnd error[skip ci]

* fix: dupliate template action[skip ci]

* fix: plugin not shown in test env

* fix: reset action not been shown

* fix: no permission error

* fix: loading error in production env

* fix: cross env dev error

* fix: blocks not shown in production env

* fix: insert template failing for the first time

* chore: merge

* fix: association record option not working correctly

* fix: setting error

* fix: setting

* fix: linkage error

* fix: association settings error

* fix: association record error

* feat: support edit form tpl

* fix: support more blocks

* fix: avoid nested template

* chore: re org codes

* chore: refactor[skip ci]

* chore: required comment for loading template [skip ci]

* refactor: simplify schema handling and add axios interceptors for template blocks[skip ci]

* fix: i18n [skip ci]

* feat: support showing template title in block

* fix: revert to template will lost the template title

* fix: delete operation removing blocks not working

* fix: template label

* fix: i18n error

* fix: form type should be shown only when current record

* feat: show template in the add new popup

* fix: form type switch should not be shown in add new block popup

* fix: missing i18n

* fix: associate fields should be shown only having current record

* fix: switching form not working in cn

* fix: incorrect form associate setting

* fix: uniq action issue

* fix: uniq fields/actions[skip ci]

* fix: style issue

* fix: error in configure actions

* fix: bulk destroy when no records selected

* fix: only show revert to template config in the block level

* fix: table refresh pagination incorrect after deletion

* fix: be able to input name of template

* fix: bulk destroy

* fix: reset setting will sync with template

* fix: block template table style

* fix: missing translatation

* fix: cache issue

* fix: blocks not shown in the popup after modifing the template

* feat: add search for template initializers

* fix: some blocks are missing template related setting

* fix: hide save as template in template configure view

* chore: revert incorrect commit

* fix: batchpatch error

* fix: mobile support

* fix: build error

* fix: limit one template one block

* feat: show revert to template for fields and actions

* fix: build error

* fix: revert to template not refreshing the ui for actions

* fix: revert to template not working for form

* fix: duplicate revert to setting setting item

* chore: rename reset to revert

* feat: disallow delete template's blocks in page

* feat: add colorTemplateBgSettingsHover for template block hover state

* fix: build error

* chore: hide convert to block template setting item for page

* fix: data template should be hidden in edit form

* fix: fields switch should be disabled

* chore: rename var [skip ci]

* fix: should not be able remove field in block

* fix: after revert settings, is able to remove block in template

* fix: revert settings

* fix: nested template block error

* refactor: cache

* fix: template key has not been validated in client side

* fix: only show template that has been configured

* feat: show template name in edit form

* chore: update package.json

* fix: duplicated fields after dnd in form

* fix: duplicated fields shown in form

* chore: hide old block template menu

* feat: support mobile block template [skip ci]

* fix: filter for type options [skip ci]

* fix: incorrect create new  button style [skip ci]

* feat: add mobile block support

* fix: can't restrict one template one block [skip ci]

* fix: template title not synced after editing template

* fix: keep block deletion should transform the template block to normal block

* fix: insert template fails for the first time

* fix: destroy error

* fix: deploy failure [skip ci]

* fix: destory error in subapp with sub domain

* fix: destroy error

* fix: popup action should be hidden in create new form [skip ci]

* fix: possible crash when converting template to block [skip ci]

* fix: some properties have not been revert in real time

* fix: fitler action condition error

* fix: useDataBlockResource error

* fix: revert settings not refresh filter action form [skip ci]

* fix: new template properties clear

* fix: custom request action can't be shown

* fix: template tab should not be removable

* fix: duplicated delete action in table column

* fix: field link popup not shown in block template page

* fix: page configure link not working correctly

* chore: revert useContextVaraible [skip ci]

* fix(popup): fix configured page not taking effect

* fix: add blocks  button shown in block settings

* fix: only loading 20 templates

* fix: add block icon has been shown [skip ci]

* fix: association not shown in block template configure page

* fix: edit association form error [skip ci]

* fix: console error [skip ci]

* fix: only current field has been refreshed after revert to template [skip ci]

* chore: remove incorrect commit file [skip ci]

* fix: some action delete action still be shown for template block [skip ci]

* fix: template block style[skip ci]

* fix: keep position when rever setting[skip ci]

* fix: revert to template error when already deleted from block [skip ci]

* fix: revert still works even the template has been deleted

* fix: popup not shown as template block [skip ci]

* fix: bulk destory can't keep blocks[skip ci]

* fix: after dnd some unique blocks may be duplicated in the client [skip ci]

* fix: duplicate fields error in form

* fix: revert setting incorrect [skip ci]

* fix: duplicated sub form

* refactor: simplify by moving template loading to backend [skip  ci]

* fix: failing to add template block [skip ci]

* fix: assign fields values in bulk update action [skip ci]

* fix: can't add fields in nester popup subform [skip ci]

* fix: sub-table sub-form not merged correctly [skip ci]

* fix: subtable not highlight unique fields correctly [skip ci]

* fix: block title will not be synced correctly [skip ci]

* fix: can't add block into template [skip ci]

* fix: revert setting not refreshed [skip ci]

* fix: block template title not correct in some cases [skip ci]

* fix: field link's popup merge[skip ci]

* fix: cannot read properties of null in some popup [skip ci]

* fix: position of ui components have not been saved after dnd [skip ci]

* fix: dnd position not saved correctly in some cases [skip ci]

* fix: dnd undefined type error [skip ci]

* fix: can't swtich form type

* fix: some form type switch error [skip ci]

* fix: hide chart block from templates [skip ci]

* feat: support hide some blocks from template [skip ci]

* fix: react error for revert submit button of edit form [skip ci]

* fix: hide workflow and approvar block from template

* fix: hide connect data block from template [skip ci]

* fix: error [skip ci]

* fix: associate record options have not been shown for create form [skip ci]

* fix: creat form popup will be shown after refresh if switch form type [skip ci]

* fix: associate record settings error [skip ci]

* fix: mobile template setting page can not open popup [skip ci]

* fix: mobile content overflow [skip ci]

* chore: update templates menu style [skip ci]

* fix: unique disassociate btn [skip ci]

* feat: save collection and component info while update template

* fix: clear template context info after remove block

* chore: update template block entry point

* fix: incorrect association field template block [skip ci]

* fix: template title only shown after refresh

* fix: tooltip can't be revert correctly after moving entry to submenu [skip ci]

* fix: incorrect behavior after adding collection submenu entries [skip ci]

* fix: edit form support

* fix: support current details [skip ci]

* fix: edit form btn not correct [skip ci]

* fix: create form action params [skip ci]

* fix: hide template menu entry in block template configure page [skip ci]

* fix: incorrect association [skip ci]

* fix: nested template [skip ci]

* fix: can't insert template in mobile [skip ci]

* fix: association title not correct for details block [skip ci]

* chore: remove incorrect submodules commit [skip ci]

* fix: create form is using post method [skip ci]

* fix: association hasone and belongsto details block error [skip ci]

* fix: edit form not able load data [skip ci]

* chore: hide tab bar in mobile template configure page [skip ci]

* fix: don't show no accessible pages for template configure page [skip ci]

* fix: not able to see template list on the first time opening popup [skip ci]

* fix: able to remove related approvals template block [skip ci]

* fix: data not loading for details hasone relationship [skip ci]

* fix: dnd position may not be saved [skip ci]

* fix: multi-step-form is able to delete template step[skip ci]

* fix: hide rever setting in multi step form step name [skip ci]

* fix: extrol wrap when adding blocks from template [skip ci]

* fix: nested schema patch [skip ci]

* fix: x-acl-action not correct[skip ci]

* fix: diassociate action should be unique [skip ci]

* fix: disassociate action not unique [skip ci]

* fix: mobile popup by url not working [skip ci]

* chore: code clean

* chore: update delete setting position [skip ci]

* chore: keep revert btn position consistant in all places [skip ci]

* chore: hide template from workflow setting page [skip ci]

* chore: update setting menu icon [skip ci]

* chore: rename provider name to avoid duplicated with core [skip ci]

* chore: move block template menu to an upper level [skip ci]

* fix: hide other block templates menu [skip ci]

* fix: hide other blocks when creating template

* fix: duplicate revert to template option

* fix: mail manager template block not shown in popup

* fix: main block not showing in popup

* chore: mark old template features as deprecated

* chore: hide deprecated templates in block template configure page

* fix: read x-virtual from null

* fix: ci test error

* fix: skip old templates e2e test cases

* fix: skip old templates e2e test cases

---------

Co-authored-by: Zeke Zhang <958414905@qq.com>
2025-02-20 22:23:07 +08:00

249 lines
13 KiB
TypeScript

/**
* This file is part of the NocoBase (R) project.
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
* Authors: NocoBase Team.
*
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
* For more information, please refer to: https://www.nocobase.com/agreement.
*/
import { Plugin } from '../application/Plugin';
import { CreateChildInitializer } from '../modules/actions/add-child/CreateChildInitializer';
import { CreateActionInitializer } from '../modules/actions/add-new/CreateActionInitializer';
import {
createFormBlockInitializers,
createFormBlockInitializers_deprecated,
} from '../modules/actions/add-new/createFormBlockInitializers';
import {
customizeCreateFormBlockInitializers,
customizeCreateFormBlockInitializers_deprecated,
} from '../modules/actions/add-record/customizeCreateFormBlockInitializers';
import { BulkDestroyActionInitializer } from '../modules/actions/bulk-destroy/BulkDestroyActionInitializer';
import { DestroyActionInitializer } from '../modules/actions/delete/DestroyActionInitializer';
import { DisassociateActionInitializer } from '../modules/actions/disassociate/DisassociateActionInitializer';
import { ExpandableActionInitializer } from '../modules/actions/expand-collapse/ExpandableActionInitializer';
import { FilterActionInitializer } from '../modules/actions/filter/FilterActionInitializer';
import { RefreshActionInitializer } from '../modules/actions/refresh/RefreshActionInitializer';
import { CreateSubmitActionInitializer } from '../modules/actions/submit/CreateSubmitActionInitializer';
import { UpdateSubmitActionInitializer } from '../modules/actions/submit/UpdateSubmitActionInitializer';
import { UpdateRecordActionInitializer } from '../modules/actions/update-record/UpdateRecordActionInitializer';
import { PopupActionInitializer } from '../modules/actions/view-edit-popup/PopupActionInitializer';
import { LinkActionInitializer } from '../modules/actions/link/LinkActionInitializer';
import { recordFormBlockInitializers } from '../modules/actions/view-edit-popup/RecordFormBlockInitializers';
import { UpdateActionInitializer } from '../modules/actions/view-edit-popup/UpdateActionInitializer';
import { ViewActionInitializer } from '../modules/actions/view-edit-popup/ViewActionInitializer';
import {
detailsActionInitializers,
detailsActionInitializers_deprecated,
} from '../modules/blocks/data-blocks/details-multi/DetailsActionInitializers';
import { DetailsBlockInitializer } from '../modules/blocks/data-blocks/details-multi/DetailsBlockInitializer';
import {
readPrettyFormActionInitializers,
readPrettyFormActionInitializers_deprecated,
} from '../modules/blocks/data-blocks/details-single/ReadPrettyFormActionInitializers';
import {
readPrettyFormItemInitializers,
readPrettyFormItemInitializers_deprecated,
} from '../modules/blocks/data-blocks/details-single/ReadPrettyFormItemInitializers';
import { RecordReadPrettyFormBlockInitializer } from '../modules/blocks/data-blocks/details-single/RecordReadPrettyFormBlockInitializer';
import { FormBlockInitializer } from '../modules/blocks/data-blocks/form/FormBlockInitializer';
import { RecordFormBlockInitializer } from '../modules/blocks/data-blocks/form/RecordFormBlockInitializer';
import {
createFormActionInitializers,
createFormActionInitializers_deprecated,
} from '../modules/blocks/data-blocks/form/createFormActionInitializers';
import { formActionInitializers } from '../modules/blocks/data-blocks/form/formActionInitializers';
import {
formItemInitializers,
formItemInitializers_deprecated,
} from '../modules/blocks/data-blocks/form/formItemInitializers';
import {
updateFormActionInitializers,
updateFormActionInitializers_deprecated,
} from '../modules/blocks/data-blocks/form/updateFormActionInitializers';
import {
gridCardActionInitializers,
gridCardActionInitializers_deprecated,
} from '../modules/blocks/data-blocks/grid-card/GridCardActionInitializers';
import { GridCardBlockInitializer } from '../modules/blocks/data-blocks/grid-card/GridCardBlockInitializer';
import {
gridCardItemActionInitializers,
gridCardItemActionInitializers_deprecated,
} from '../modules/blocks/data-blocks/grid-card/gridCardItemActionInitializers';
import {
listActionInitializers,
listActionInitializers_deprecated,
} from '../modules/blocks/data-blocks/list/ListActionInitializers';
import { ListBlockInitializer } from '../modules/blocks/data-blocks/list/ListBlockInitializer';
import {
listItemActionInitializers,
listItemActionInitializers_deprecated,
} from '../modules/blocks/data-blocks/list/listItemActionInitializers';
import { TableSelectorInitializer } from '../modules/blocks/data-blocks/table-selector/TableSelectorInitializer';
import {
tableActionColumnInitializers,
tableActionColumnInitializers_deprecated,
} from '../modules/blocks/data-blocks/table/TableActionColumnInitializers';
import {
tableActionInitializers,
tableActionInitializers_deprecated,
} from '../modules/blocks/data-blocks/table/TableActionInitializers';
import { TableBlockInitializer } from '../modules/blocks/data-blocks/table/TableBlockInitializer';
import {
tableColumnInitializers,
tableColumnInitializers_deprecated,
} from '../modules/blocks/data-blocks/table/TableColumnInitializers';
import { FilterCollapseBlockInitializer } from '../modules/blocks/filter-blocks/collapse/FilterCollapseBlockInitializer';
import {
filterFormActionInitializers,
filterFormActionInitializers_deprecated,
} from '../modules/blocks/filter-blocks/form/FilterFormActionInitializers';
import { FilterFormBlockInitializer } from '../modules/blocks/filter-blocks/form/FilterFormBlockInitializer';
import {
filterFormItemInitializers,
filterFormItemInitializers_deprecated,
} from '../modules/blocks/filter-blocks/form/filterFormItemInitializers';
import { MarkdownBlockInitializer } from '../modules/blocks/other-blocks/markdown/MarkdownBlockInitializer';
import { MarkdownFormItemInitializer } from '../modules/blocks/other-blocks/markdown/MarkdownFormItemInitializer';
import {
tableSelectorInitializers,
tableSelectorInitializers_deprecated,
} from '../modules/fields/component/Picker/TableSelectorInitializers';
import { CollectionFieldInitializer } from '../modules/fields/initializer/CollectionFieldInitializer';
import { TableCollectionFieldInitializer } from '../modules/fields/initializer/TableCollectionFieldInitializer';
import { menuItemInitializer, menuItemInitializer_deprecated } from '../modules/menu/menuItemInitializer';
import { blockInitializers, blockInitializers_deprecated } from '../modules/page/BlockInitializers';
import { DividerFormItemInitializer } from '../modules/blocks/other-blocks/divider/DividerFormItemInitializer';
import { AssociateActionInitializer } from '../modules/actions/associate/AssociateActionInitializer';
import { AssociateActionProvider } from '../modules/actions/associate/AssociateActionProvider';
import {
customFormItemInitializers,
customFormItemInitializers_deprecated,
recordBlockInitializers,
recordBlockInitializers_deprecated,
subTableActionInitializers,
subTableActionInitializers_deprecated,
tabPaneInitializers,
tabPaneInitializersForBulkEditFormBlock,
tabPaneInitializersForRecordBlock,
tabPaneInitializers_deprecated,
} from './buttons';
import * as initializerComponents from './components';
import * as items from './items';
export * from './buttons';
export * from './items';
export {
createDetailsBlockSchema,
createFormBlockSchema,
createReadPrettyFormBlockSchema,
createTableBlockSchema,
gridRowColWrap,
itemsMerge,
useAssociatedFormItemInitializerFields,
useAssociatedTableColumnInitializerFields,
useCollectionDataSourceItems,
useCurrentSchema,
useFormItemInitializerFields,
useInheritsTableColumnInitializerFields,
useRecordCollectionDataSourceItems,
useRemoveGridFormItem,
useTableColumnInitializerFields,
registerInitializerMenusGenerator,
} from './utils';
export class SchemaInitializerPlugin extends Plugin {
async load() {
this.app.addComponents({
...initializerComponents,
...items,
DestroyActionInitializer,
FormBlockInitializer,
RecordFormBlockInitializer,
TableBlockInitializer,
TableSelectorInitializer,
RecordReadPrettyFormBlockInitializer,
DetailsBlockInitializer,
ListBlockInitializer,
GridCardBlockInitializer,
FilterFormBlockInitializer,
FilterCollapseBlockInitializer,
MarkdownBlockInitializer,
MarkdownFormItemInitializer,
TableCollectionFieldInitializer,
CollectionFieldInitializer,
CreateActionInitializer,
CreateChildInitializer,
ViewActionInitializer,
UpdateActionInitializer,
PopupActionInitializer,
LinkActionInitializer,
UpdateRecordActionInitializer,
CreateSubmitActionInitializer,
UpdateSubmitActionInitializer,
BulkDestroyActionInitializer,
ExpandableActionInitializer,
DisassociateActionInitializer,
FilterActionInitializer,
RefreshActionInitializer,
DividerFormItemInitializer,
AssociateActionInitializer,
AssociateActionProvider,
} as any);
this.app.schemaInitializerManager.add(blockInitializers_deprecated);
this.app.schemaInitializerManager.add(blockInitializers);
this.app.schemaInitializerManager.add(tableActionInitializers_deprecated);
this.app.schemaInitializerManager.add(tableActionInitializers);
this.app.schemaInitializerManager.add(tableColumnInitializers_deprecated);
this.app.schemaInitializerManager.add(tableColumnInitializers);
this.app.schemaInitializerManager.add(tableActionColumnInitializers_deprecated);
this.app.schemaInitializerManager.add(tableActionColumnInitializers);
this.app.schemaInitializerManager.add(formItemInitializers_deprecated);
this.app.schemaInitializerManager.add(formItemInitializers);
this.app.schemaInitializerManager.add(formActionInitializers);
this.app.schemaInitializerManager.add(detailsActionInitializers_deprecated);
this.app.schemaInitializerManager.add(detailsActionInitializers);
this.app.schemaInitializerManager.add(readPrettyFormItemInitializers_deprecated);
this.app.schemaInitializerManager.add(readPrettyFormItemInitializers);
this.app.schemaInitializerManager.add(readPrettyFormActionInitializers_deprecated);
this.app.schemaInitializerManager.add(readPrettyFormActionInitializers);
this.app.schemaInitializerManager.add(createFormBlockInitializers_deprecated);
this.app.schemaInitializerManager.add(createFormBlockInitializers);
this.app.schemaInitializerManager.add(customizeCreateFormBlockInitializers_deprecated);
this.app.schemaInitializerManager.add(customizeCreateFormBlockInitializers);
this.app.schemaInitializerManager.add(customFormItemInitializers_deprecated);
this.app.schemaInitializerManager.add(customFormItemInitializers);
this.app.schemaInitializerManager.add(filterFormActionInitializers_deprecated);
this.app.schemaInitializerManager.add(filterFormActionInitializers);
this.app.schemaInitializerManager.add(createFormActionInitializers_deprecated);
this.app.schemaInitializerManager.add(createFormActionInitializers);
this.app.schemaInitializerManager.add(updateFormActionInitializers_deprecated);
this.app.schemaInitializerManager.add(updateFormActionInitializers);
this.app.schemaInitializerManager.add(filterFormItemInitializers_deprecated);
this.app.schemaInitializerManager.add(filterFormItemInitializers);
this.app.schemaInitializerManager.add(gridCardActionInitializers_deprecated);
this.app.schemaInitializerManager.add(gridCardActionInitializers);
this.app.schemaInitializerManager.add(gridCardItemActionInitializers_deprecated);
this.app.schemaInitializerManager.add(gridCardItemActionInitializers);
this.app.schemaInitializerManager.add(listActionInitializers_deprecated);
this.app.schemaInitializerManager.add(listActionInitializers);
this.app.schemaInitializerManager.add(listItemActionInitializers_deprecated);
this.app.schemaInitializerManager.add(listItemActionInitializers);
this.app.schemaInitializerManager.add(recordBlockInitializers_deprecated);
this.app.schemaInitializerManager.add(recordBlockInitializers);
this.app.schemaInitializerManager.add(recordFormBlockInitializers);
this.app.schemaInitializerManager.add(subTableActionInitializers_deprecated);
this.app.schemaInitializerManager.add(subTableActionInitializers);
this.app.schemaInitializerManager.add(tableSelectorInitializers_deprecated);
this.app.schemaInitializerManager.add(tableSelectorInitializers);
this.app.schemaInitializerManager.add(tabPaneInitializers_deprecated);
this.app.schemaInitializerManager.add(tabPaneInitializers);
this.app.schemaInitializerManager.add(tabPaneInitializersForRecordBlock);
this.app.schemaInitializerManager.add(tabPaneInitializersForBulkEditFormBlock);
this.app.schemaInitializerManager.add(menuItemInitializer_deprecated);
this.app.schemaInitializerManager.add(menuItemInitializer);
}
}