@akanjs/cli 0.0.142 → 0.0.144
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 +8 -0
- package/cjs/index.js +2437 -3204
- package/cjs/src/guidelines/___library/sharedUiStructureDescription.en.md +786 -0
- package/cjs/src/guidelines/___library/utilUiStructureDescription.en.md +395 -0
- package/cjs/src/guidelines/___lint/lintRuleDescription.en.md +64 -0
- package/cjs/src/guidelines/___module/moduleStructureDescription.en.md +80 -0
- package/cjs/src/guidelines/componentRule/componentRule.instruction.md +732 -0
- package/cjs/src/guidelines/databaseModule/databaseModule.instruction.md +691 -0
- package/cjs/src/guidelines/enumConstant/enumConstant.instruction.md +232 -0
- package/cjs/src/guidelines/fieldDecorator/fieldDecorator.instruction.md +611 -0
- package/cjs/src/guidelines/framework/framework.instruction.md +1112 -0
- package/cjs/src/guidelines/modelConstant/modelConstant.instruction.md +958 -0
- package/cjs/src/guidelines/modelDictionary/modelDictionary.instruction.md +583 -0
- package/cjs/src/guidelines/modelDocument/modelDocument.instruction.md +683 -0
- package/cjs/src/guidelines/modelService/modelService.instruction.md +935 -0
- package/cjs/src/guidelines/modelSignal/modelSignal.instruction.md +588 -0
- package/cjs/src/guidelines/modelStore/modelStore.instruction.md +591 -0
- package/cjs/src/guidelines/modelTemplate/modelTemplate.instruction.md +577 -0
- package/cjs/src/guidelines/modelUnit/modelUnit.instruction.md +833 -0
- package/cjs/src/guidelines/modelUtil/modelUtil.instruction.md +752 -0
- package/cjs/src/guidelines/modelView/modelView.instruction.md +1005 -0
- package/cjs/src/guidelines/modelZone/modelZone.instruction.md +528 -0
- package/cjs/src/guidelines/scalarConstant/scalarConstant.instruction.md +489 -0
- package/cjs/src/guidelines/scalarDictionary/scalarDictionary.instruction.md +347 -0
- package/cjs/src/guidelines/sharedUiUsage/sharedUiUsage.instruction.md +318 -0
- package/cjs/src/guidelines/utilUiUsage/utilUiUsage.instruction.md +339 -0
- package/cjs/src/templates/module/__model__.dictionary.js +4 -5
- package/esm/index.js +2524 -3286
- package/esm/src/guidelines/___library/sharedUiStructureDescription.en.md +786 -0
- package/esm/src/guidelines/___library/utilUiStructureDescription.en.md +395 -0
- package/esm/src/guidelines/___lint/lintRuleDescription.en.md +64 -0
- package/esm/src/guidelines/___module/moduleStructureDescription.en.md +80 -0
- package/esm/src/guidelines/componentRule/componentRule.instruction.md +732 -0
- package/esm/src/guidelines/databaseModule/databaseModule.instruction.md +691 -0
- package/esm/src/guidelines/enumConstant/enumConstant.instruction.md +232 -0
- package/esm/src/guidelines/fieldDecorator/fieldDecorator.instruction.md +611 -0
- package/esm/src/guidelines/framework/framework.instruction.md +1112 -0
- package/esm/src/guidelines/modelConstant/modelConstant.instruction.md +958 -0
- package/esm/src/guidelines/modelDictionary/modelDictionary.instruction.md +583 -0
- package/esm/src/guidelines/modelDocument/modelDocument.instruction.md +683 -0
- package/esm/src/guidelines/modelService/modelService.instruction.md +935 -0
- package/esm/src/guidelines/modelSignal/modelSignal.instruction.md +588 -0
- package/esm/src/guidelines/modelStore/modelStore.instruction.md +591 -0
- package/esm/src/guidelines/modelTemplate/modelTemplate.instruction.md +577 -0
- package/esm/src/guidelines/modelUnit/modelUnit.instruction.md +833 -0
- package/esm/src/guidelines/modelUtil/modelUtil.instruction.md +752 -0
- package/esm/src/guidelines/modelView/modelView.instruction.md +1005 -0
- package/esm/src/guidelines/modelZone/modelZone.instruction.md +528 -0
- package/esm/src/guidelines/scalarConstant/scalarConstant.instruction.md +489 -0
- package/esm/src/guidelines/scalarDictionary/scalarDictionary.instruction.md +347 -0
- package/esm/src/guidelines/sharedUiUsage/sharedUiUsage.instruction.md +318 -0
- package/esm/src/guidelines/utilUiUsage/utilUiUsage.instruction.md +339 -0
- package/esm/src/templates/module/__model__.dictionary.js +4 -5
- package/package.json +3 -1
- package/src/guideline/guideline.command.d.ts +7 -0
- package/src/guideline/guideline.prompt.d.ts +15 -0
- package/src/guideline/guideline.runner.d.ts +5 -0
- package/src/guideline/guideline.script.d.ts +6 -0
- package/src/guidelines/___library/sharedUiStructureDescription.en.md +786 -0
- package/src/guidelines/___library/utilUiStructureDescription.en.md +395 -0
- package/src/guidelines/___lint/lintRuleDescription.en.md +64 -0
- package/src/guidelines/___module/moduleStructureDescription.en.md +80 -0
- package/src/guidelines/componentRule/componentRule.instruction.md +732 -0
- package/src/guidelines/databaseModule/databaseModule.instruction.md +691 -0
- package/src/guidelines/enumConstant/enumConstant.instruction.md +232 -0
- package/src/guidelines/fieldDecorator/fieldDecorator.instruction.md +611 -0
- package/src/guidelines/framework/framework.instruction.md +1112 -0
- package/src/guidelines/modelConstant/modelConstant.instruction.md +958 -0
- package/src/guidelines/modelDictionary/modelDictionary.instruction.md +583 -0
- package/src/guidelines/modelDocument/modelDocument.instruction.md +683 -0
- package/src/guidelines/modelService/modelService.instruction.md +935 -0
- package/src/guidelines/modelSignal/modelSignal.instruction.md +588 -0
- package/src/guidelines/modelStore/modelStore.instruction.md +591 -0
- package/src/guidelines/modelTemplate/modelTemplate.instruction.md +577 -0
- package/src/guidelines/modelUnit/modelUnit.instruction.md +833 -0
- package/src/guidelines/modelUtil/modelUtil.instruction.md +752 -0
- package/src/guidelines/modelView/modelView.instruction.md +1005 -0
- package/src/guidelines/modelZone/modelZone.instruction.md +528 -0
- package/src/guidelines/scalarConstant/scalarConstant.instruction.md +489 -0
- package/src/guidelines/scalarDictionary/scalarDictionary.instruction.md +347 -0
- package/src/guidelines/sharedUiUsage/sharedUiUsage.instruction.md +318 -0
- package/src/guidelines/utilUiUsage/utilUiUsage.instruction.md +339 -0
- package/src/module/module.command.d.ts +6 -8
- package/src/module/module.prompt.d.ts +2 -15
- package/src/module/module.request.d.ts +22 -18
- package/src/module/module.runner.d.ts +4 -20
- package/src/module/module.script.d.ts +6 -7
- package/src/scalar/scalar.command.d.ts +7 -0
- package/src/scalar/scalar.prompt.d.ts +23 -0
- package/src/scalar/scalar.runner.d.ts +13 -0
- package/src/scalar/scalar.script.d.ts +6 -0
- package/cjs/src/templates/app/app/[lang]/(__appName__)/(public)/forgotpassword/page.js +0 -47
- package/cjs/src/templates/app/app/[lang]/(__appName__)/(public)/page.js +0 -128
- package/cjs/src/templates/app/app/[lang]/(__appName__)/(public)/privacy/page.js +0 -42
- package/cjs/src/templates/app/app/[lang]/(__appName__)/(public)/signin/page.js +0 -50
- package/cjs/src/templates/app/app/[lang]/(__appName__)/(public)/termsofservice/page.js +0 -41
- package/cjs/src/templates/app/app/[lang]/(__appName__)/(public)/unknown/page.js +0 -51
- package/cjs/src/templates/app/app/[lang]/(__appName__)/(user)/layout.js +0 -43
- package/cjs/src/templates/app/app/[lang]/(__appName__)/(user)/self/page.js +0 -60
- package/cjs/src/templates/app/app/[lang]/(__appName__)/layout.js +0 -54
- package/cjs/src/templates/app/app/[lang]/(__appName__)/styles.css.template +0 -19
- package/cjs/src/templates/app/app/[lang]/admin/layout.js +0 -54
- package/cjs/src/templates/app/app/[lang]/admin/page.js +0 -63
- package/cjs/src/templates/app/app/csr.js +0 -34
- package/cjs/src/templates/app/app/index.html.template +0 -13
- package/cjs/src/templates/app/app/layout.js +0 -38
- package/cjs/src/templates/app/capacitor.config.ts.template +0 -8
- package/cjs/src/templates/app/env/env.client.debug.ts.template +0 -7
- package/cjs/src/templates/app/env/env.client.develop.ts.template +0 -7
- package/cjs/src/templates/app/env/env.client.local.ts.template +0 -7
- package/cjs/src/templates/app/env/env.client.main.ts.template +0 -7
- package/cjs/src/templates/app/env/env.client.testing.ts.template +0 -7
- package/cjs/src/templates/app/env/env.server.debug.ts.template +0 -15
- package/cjs/src/templates/app/env/env.server.develop.ts.template +0 -15
- package/cjs/src/templates/app/env/env.server.local.ts.template +0 -15
- package/cjs/src/templates/app/env/env.server.main.ts.template +0 -15
- package/cjs/src/templates/app/env/env.server.testing.ts.template +0 -7
- package/cjs/src/templates/app/lib/setting/Setting.Template.js +0 -57
- package/cjs/src/templates/app/lib/setting/Setting.Unit.js +0 -38
- package/cjs/src/templates/app/lib/setting/Setting.Util.js +0 -34
- package/cjs/src/templates/app/lib/setting/Setting.View.js +0 -51
- package/cjs/src/templates/app/lib/setting/Setting.Zone.js +0 -80
- package/cjs/src/templates/app/lib/setting/index.js +0 -61
- package/cjs/src/templates/app/lib/summary/Summary.Template.js +0 -43
- package/cjs/src/templates/app/lib/summary/Summary.Unit.js +0 -38
- package/cjs/src/templates/app/lib/summary/Summary.Util.js +0 -33
- package/cjs/src/templates/app/lib/summary/Summary.View.js +0 -51
- package/cjs/src/templates/app/lib/summary/Summary.Zone.js +0 -62
- package/cjs/src/templates/app/lib/summary/index.js +0 -67
- package/cjs/src/templates/app/lib/user/User.Template.js +0 -65
- package/cjs/src/templates/app/lib/user/User.Unit.js +0 -38
- package/cjs/src/templates/app/lib/user/User.Util.js +0 -94
- package/cjs/src/templates/app/lib/user/User.View.js +0 -66
- package/cjs/src/templates/app/lib/user/User.Zone.js +0 -74
- package/cjs/src/templates/app/lib/user/index.js +0 -61
- package/cjs/src/templates/app/page.test.ts.template +0 -10
- package/cjs/src/templates/app/playwright.config.ts.template +0 -6
- package/cjs/src/templates/app/postcss.config.js.template +0 -10
- package/cjs/src/templates/app/public/manifest.json.template +0 -67
- package/cjs/src/templates/app/tsconfig.json.template +0 -22
- package/cjs/src/templates/app/tsconfig.spec.json.template +0 -7
- package/cjs/src/templates/app/ui/Footer.js +0 -67
- package/cjs/src/templates/app/ui/MainHeader.js +0 -131
- package/cjs/src/templates/crudPages/[__model__Id]/edit/page.js +0 -73
- package/cjs/src/templates/crudPages/[__model__Id]/page.js +0 -83
- package/cjs/src/templates/crudPages/new/page.js +0 -70
- package/cjs/src/templates/crudPages/page.js +0 -71
- package/cjs/src/templates/libRoot/.gitignore.template +0 -15
- package/cjs/src/templates/libRoot/env/env.server.example.ts.template +0 -7
- package/cjs/src/templates/libRoot/env/env.server.testing.ts.template +0 -7
- package/cjs/src/templates/libRoot/lib/setting/Setting.Template.js +0 -57
- package/cjs/src/templates/libRoot/lib/setting/Setting.Unit.js +0 -38
- package/cjs/src/templates/libRoot/lib/setting/Setting.Util.js +0 -34
- package/cjs/src/templates/libRoot/lib/setting/Setting.View.js +0 -51
- package/cjs/src/templates/libRoot/lib/setting/Setting.Zone.js +0 -80
- package/cjs/src/templates/libRoot/lib/setting/index.js +0 -61
- package/cjs/src/templates/libRoot/lib/summary/Summary.Template.js +0 -43
- package/cjs/src/templates/libRoot/lib/summary/Summary.Unit.js +0 -38
- package/cjs/src/templates/libRoot/lib/summary/Summary.Util.js +0 -33
- package/cjs/src/templates/libRoot/lib/summary/Summary.View.js +0 -51
- package/cjs/src/templates/libRoot/lib/summary/Summary.Zone.js +0 -62
- package/cjs/src/templates/libRoot/lib/summary/index.js +0 -67
- package/cjs/src/templates/libRoot/lib/user/User.Template.js +0 -65
- package/cjs/src/templates/libRoot/lib/user/User.Unit.js +0 -38
- package/cjs/src/templates/libRoot/lib/user/User.Util.js +0 -94
- package/cjs/src/templates/libRoot/lib/user/User.View.js +0 -66
- package/cjs/src/templates/libRoot/lib/user/User.Zone.js +0 -74
- package/cjs/src/templates/libRoot/lib/user/index.js +0 -61
- package/cjs/src/templates/libRoot/package.json.template +0 -4
- package/cjs/src/templates/libRoot/tsconfig.json.template +0 -13
- package/cjs/src/templates/libRoot/tsconfig.spec.json.template +0 -7
- package/cjs/src/templates/localDev/docker-compose.yaml.template +0 -36
- package/cjs/src/templates/module/__Model__.Template.js +0 -54
- package/cjs/src/templates/module/__Model__.Unit.js +0 -42
- package/cjs/src/templates/module/__Model__.Util.js +0 -70
- package/cjs/src/templates/module/__Model__.View.js +0 -48
- package/cjs/src/templates/module/__Model__.Zone.js +0 -83
- package/cjs/src/templates/module/index.js +0 -61
- package/cjs/src/templates/pkgRoot/tsconfig.json.template +0 -15
- package/cjs/src/templates/workspaceRoot/.env.template +0 -20
- package/cjs/src/templates/workspaceRoot/.gitignore.template +0 -118
- package/cjs/src/templates/workspaceRoot/.prettierignore.template +0 -10
- package/cjs/src/templates/workspaceRoot/.prettierrc.json.template +0 -6
- package/cjs/src/templates/workspaceRoot/.swcrc.template +0 -9
- package/cjs/src/templates/workspaceRoot/.vscode/settings.json.template +0 -13
- package/cjs/src/templates/workspaceRoot/README.md.template +0 -37
- package/cjs/src/templates/workspaceRoot/eslint.config.ts.template +0 -3
- package/cjs/src/templates/workspaceRoot/package.json.template +0 -43
- package/cjs/src/templates/workspaceRoot/tsconfig.json.template +0 -29
- package/esm/src/templates/app/app/[lang]/(__appName__)/(public)/forgotpassword/page.js +0 -27
- package/esm/src/templates/app/app/[lang]/(__appName__)/(public)/page.js +0 -108
- package/esm/src/templates/app/app/[lang]/(__appName__)/(public)/privacy/page.js +0 -22
- package/esm/src/templates/app/app/[lang]/(__appName__)/(public)/signin/page.js +0 -30
- package/esm/src/templates/app/app/[lang]/(__appName__)/(public)/termsofservice/page.js +0 -21
- package/esm/src/templates/app/app/[lang]/(__appName__)/(public)/unknown/page.js +0 -31
- package/esm/src/templates/app/app/[lang]/(__appName__)/(user)/layout.js +0 -23
- package/esm/src/templates/app/app/[lang]/(__appName__)/(user)/self/page.js +0 -40
- package/esm/src/templates/app/app/[lang]/(__appName__)/layout.js +0 -34
- package/esm/src/templates/app/app/[lang]/(__appName__)/styles.css.template +0 -19
- package/esm/src/templates/app/app/[lang]/admin/layout.js +0 -34
- package/esm/src/templates/app/app/[lang]/admin/page.js +0 -43
- package/esm/src/templates/app/app/csr.js +0 -14
- package/esm/src/templates/app/app/index.html.template +0 -13
- package/esm/src/templates/app/app/layout.js +0 -18
- package/esm/src/templates/app/capacitor.config.ts.template +0 -8
- package/esm/src/templates/app/env/env.client.debug.ts.template +0 -7
- package/esm/src/templates/app/env/env.client.develop.ts.template +0 -7
- package/esm/src/templates/app/env/env.client.local.ts.template +0 -7
- package/esm/src/templates/app/env/env.client.main.ts.template +0 -7
- package/esm/src/templates/app/env/env.client.testing.ts.template +0 -7
- package/esm/src/templates/app/env/env.server.debug.ts.template +0 -15
- package/esm/src/templates/app/env/env.server.develop.ts.template +0 -15
- package/esm/src/templates/app/env/env.server.local.ts.template +0 -15
- package/esm/src/templates/app/env/env.server.main.ts.template +0 -15
- package/esm/src/templates/app/env/env.server.testing.ts.template +0 -7
- package/esm/src/templates/app/lib/setting/Setting.Template.js +0 -37
- package/esm/src/templates/app/lib/setting/Setting.Unit.js +0 -18
- package/esm/src/templates/app/lib/setting/Setting.Util.js +0 -14
- package/esm/src/templates/app/lib/setting/Setting.View.js +0 -31
- package/esm/src/templates/app/lib/setting/Setting.Zone.js +0 -60
- package/esm/src/templates/app/lib/setting/index.js +0 -41
- package/esm/src/templates/app/lib/summary/Summary.Template.js +0 -23
- package/esm/src/templates/app/lib/summary/Summary.Unit.js +0 -18
- package/esm/src/templates/app/lib/summary/Summary.Util.js +0 -13
- package/esm/src/templates/app/lib/summary/Summary.View.js +0 -31
- package/esm/src/templates/app/lib/summary/Summary.Zone.js +0 -42
- package/esm/src/templates/app/lib/summary/index.js +0 -47
- package/esm/src/templates/app/lib/user/User.Template.js +0 -45
- package/esm/src/templates/app/lib/user/User.Unit.js +0 -18
- package/esm/src/templates/app/lib/user/User.Util.js +0 -74
- package/esm/src/templates/app/lib/user/User.View.js +0 -46
- package/esm/src/templates/app/lib/user/User.Zone.js +0 -54
- package/esm/src/templates/app/lib/user/index.js +0 -41
- package/esm/src/templates/app/page.test.ts.template +0 -10
- package/esm/src/templates/app/playwright.config.ts.template +0 -6
- package/esm/src/templates/app/postcss.config.js.template +0 -10
- package/esm/src/templates/app/public/manifest.json.template +0 -67
- package/esm/src/templates/app/tsconfig.json.template +0 -22
- package/esm/src/templates/app/tsconfig.spec.json.template +0 -7
- package/esm/src/templates/app/ui/Footer.js +0 -47
- package/esm/src/templates/app/ui/MainHeader.js +0 -111
- package/esm/src/templates/crudPages/[__model__Id]/edit/page.js +0 -53
- package/esm/src/templates/crudPages/[__model__Id]/page.js +0 -63
- package/esm/src/templates/crudPages/new/page.js +0 -50
- package/esm/src/templates/crudPages/page.js +0 -51
- package/esm/src/templates/libRoot/.gitignore.template +0 -15
- package/esm/src/templates/libRoot/env/env.server.example.ts.template +0 -7
- package/esm/src/templates/libRoot/env/env.server.testing.ts.template +0 -7
- package/esm/src/templates/libRoot/lib/setting/Setting.Template.js +0 -37
- package/esm/src/templates/libRoot/lib/setting/Setting.Unit.js +0 -18
- package/esm/src/templates/libRoot/lib/setting/Setting.Util.js +0 -14
- package/esm/src/templates/libRoot/lib/setting/Setting.View.js +0 -31
- package/esm/src/templates/libRoot/lib/setting/Setting.Zone.js +0 -60
- package/esm/src/templates/libRoot/lib/setting/index.js +0 -41
- package/esm/src/templates/libRoot/lib/summary/Summary.Template.js +0 -23
- package/esm/src/templates/libRoot/lib/summary/Summary.Unit.js +0 -18
- package/esm/src/templates/libRoot/lib/summary/Summary.Util.js +0 -13
- package/esm/src/templates/libRoot/lib/summary/Summary.View.js +0 -31
- package/esm/src/templates/libRoot/lib/summary/Summary.Zone.js +0 -42
- package/esm/src/templates/libRoot/lib/summary/index.js +0 -47
- package/esm/src/templates/libRoot/lib/user/User.Template.js +0 -45
- package/esm/src/templates/libRoot/lib/user/User.Unit.js +0 -18
- package/esm/src/templates/libRoot/lib/user/User.Util.js +0 -74
- package/esm/src/templates/libRoot/lib/user/User.View.js +0 -46
- package/esm/src/templates/libRoot/lib/user/User.Zone.js +0 -54
- package/esm/src/templates/libRoot/lib/user/index.js +0 -41
- package/esm/src/templates/libRoot/package.json.template +0 -4
- package/esm/src/templates/libRoot/tsconfig.json.template +0 -13
- package/esm/src/templates/libRoot/tsconfig.spec.json.template +0 -7
- package/esm/src/templates/localDev/docker-compose.yaml.template +0 -36
- package/esm/src/templates/module/__Model__.Template.js +0 -34
- package/esm/src/templates/module/__Model__.Unit.js +0 -22
- package/esm/src/templates/module/__Model__.Util.js +0 -50
- package/esm/src/templates/module/__Model__.View.js +0 -28
- package/esm/src/templates/module/__Model__.Zone.js +0 -63
- package/esm/src/templates/module/index.js +0 -41
- package/esm/src/templates/pkgRoot/tsconfig.json.template +0 -15
- package/esm/src/templates/workspaceRoot/.env.template +0 -20
- package/esm/src/templates/workspaceRoot/.gitignore.template +0 -118
- package/esm/src/templates/workspaceRoot/.prettierignore.template +0 -10
- package/esm/src/templates/workspaceRoot/.prettierrc.json.template +0 -6
- package/esm/src/templates/workspaceRoot/.swcrc.template +0 -9
- package/esm/src/templates/workspaceRoot/.vscode/settings.json.template +0 -13
- package/esm/src/templates/workspaceRoot/README.md.template +0 -37
- package/esm/src/templates/workspaceRoot/eslint.config.ts.template +0 -3
- package/esm/src/templates/workspaceRoot/package.json.template +0 -43
- package/esm/src/templates/workspaceRoot/tsconfig.json.template +0 -29
- package/src/application/application.prompt.d.ts +0 -2
- package/src/templates/app/app/[lang]/(__appName__)/(public)/forgotpassword/page.d.ts +0 -9
- package/src/templates/app/app/[lang]/(__appName__)/(public)/page.d.ts +0 -9
- package/src/templates/app/app/[lang]/(__appName__)/(public)/privacy/page.d.ts +0 -9
- package/src/templates/app/app/[lang]/(__appName__)/(public)/signin/page.d.ts +0 -9
- package/src/templates/app/app/[lang]/(__appName__)/(public)/termsofservice/page.d.ts +0 -10
- package/src/templates/app/app/[lang]/(__appName__)/(public)/unknown/page.d.ts +0 -9
- package/src/templates/app/app/[lang]/(__appName__)/(user)/layout.d.ts +0 -9
- package/src/templates/app/app/[lang]/(__appName__)/(user)/self/page.d.ts +0 -9
- package/src/templates/app/app/[lang]/(__appName__)/layout.d.ts +0 -9
- package/src/templates/app/app/[lang]/admin/layout.d.ts +0 -9
- package/src/templates/app/app/[lang]/admin/page.d.ts +0 -9
- package/src/templates/app/app/csr.d.ts +0 -9
- package/src/templates/app/app/layout.d.ts +0 -9
- package/src/templates/app/lib/setting/Setting.Template.d.ts +0 -9
- package/src/templates/app/lib/setting/Setting.Unit.d.ts +0 -9
- package/src/templates/app/lib/setting/Setting.Util.d.ts +0 -9
- package/src/templates/app/lib/setting/Setting.View.d.ts +0 -9
- package/src/templates/app/lib/setting/Setting.Zone.d.ts +0 -9
- package/src/templates/app/lib/setting/index.d.ts +0 -9
- package/src/templates/app/lib/summary/Summary.Template.d.ts +0 -9
- package/src/templates/app/lib/summary/Summary.Unit.d.ts +0 -9
- package/src/templates/app/lib/summary/Summary.Util.d.ts +0 -9
- package/src/templates/app/lib/summary/Summary.View.d.ts +0 -9
- package/src/templates/app/lib/summary/Summary.Zone.d.ts +0 -9
- package/src/templates/app/lib/summary/index.d.ts +0 -9
- package/src/templates/app/lib/user/User.Template.d.ts +0 -9
- package/src/templates/app/lib/user/User.Unit.d.ts +0 -9
- package/src/templates/app/lib/user/User.Util.d.ts +0 -9
- package/src/templates/app/lib/user/User.View.d.ts +0 -9
- package/src/templates/app/lib/user/User.Zone.d.ts +0 -9
- package/src/templates/app/lib/user/index.d.ts +0 -9
- package/src/templates/app/ui/Footer.d.ts +0 -9
- package/src/templates/app/ui/MainHeader.d.ts +0 -10
- package/src/templates/crudPages/[__model__Id]/edit/page.d.ts +0 -11
- package/src/templates/crudPages/[__model__Id]/page.d.ts +0 -11
- package/src/templates/crudPages/new/page.d.ts +0 -11
- package/src/templates/crudPages/page.d.ts +0 -11
- package/src/templates/libRoot/lib/setting/Setting.Template.d.ts +0 -9
- package/src/templates/libRoot/lib/setting/Setting.Unit.d.ts +0 -9
- package/src/templates/libRoot/lib/setting/Setting.Util.d.ts +0 -9
- package/src/templates/libRoot/lib/setting/Setting.View.d.ts +0 -9
- package/src/templates/libRoot/lib/setting/Setting.Zone.d.ts +0 -9
- package/src/templates/libRoot/lib/setting/index.d.ts +0 -9
- package/src/templates/libRoot/lib/summary/Summary.Template.d.ts +0 -9
- package/src/templates/libRoot/lib/summary/Summary.Unit.d.ts +0 -9
- package/src/templates/libRoot/lib/summary/Summary.Util.d.ts +0 -9
- package/src/templates/libRoot/lib/summary/Summary.View.d.ts +0 -9
- package/src/templates/libRoot/lib/summary/Summary.Zone.d.ts +0 -9
- package/src/templates/libRoot/lib/summary/index.d.ts +0 -9
- package/src/templates/libRoot/lib/user/User.Template.d.ts +0 -9
- package/src/templates/libRoot/lib/user/User.Unit.d.ts +0 -9
- package/src/templates/libRoot/lib/user/User.Util.d.ts +0 -9
- package/src/templates/libRoot/lib/user/User.View.d.ts +0 -9
- package/src/templates/libRoot/lib/user/User.Zone.d.ts +0 -9
- package/src/templates/libRoot/lib/user/index.d.ts +0 -9
- package/src/templates/module/__Model__.Template.d.ts +0 -11
- package/src/templates/module/__Model__.Unit.d.ts +0 -11
- package/src/templates/module/__Model__.Util.d.ts +0 -11
- package/src/templates/module/__Model__.View.d.ts +0 -11
- package/src/templates/module/__Model__.Zone.d.ts +0 -11
- package/src/templates/module/index.d.ts +0 -11
|
@@ -0,0 +1,528 @@
|
|
|
1
|
+
# Model.Zone.tsx File Guide for Akan.js
|
|
2
|
+
|
|
3
|
+
## Purpose and Role of Model.Zone.tsx Files
|
|
4
|
+
|
|
5
|
+
Model.Zone.tsx files are client-side container components in Akan.js that serve as the bridge between data fetching and UI presentation. They provide a consistent interface for displaying model data across your application.
|
|
6
|
+
|
|
7
|
+
Key roles of Zone components:
|
|
8
|
+
|
|
9
|
+
1. **Layout Containers** - Create structured layouts for specific data models
|
|
10
|
+
2. **Component Composition** - Assemble smaller components (Units, Views, Templates) into cohesive UI blocks
|
|
11
|
+
3. **Client-Side Integration** - Handle client-side state, interactions, and navigation
|
|
12
|
+
4. **Data Presentation** - Connect data sources to presentation components
|
|
13
|
+
5. **Reusable UI Patterns** - Establish consistent patterns for common UI scenarios (lists, cards, forms)
|
|
14
|
+
|
|
15
|
+
Zone components are positioned between page components and individual UI components in the component hierarchy:
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
Page Components → Zone Components → View/Unit/Template Components
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Component Structure and Naming Patterns
|
|
22
|
+
|
|
23
|
+
### Location and Naming Convention
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
{app-name}/lib/{model-name}/{model-name}.Zone.tsx
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Example: `apps/angelo/lib/bizAccount/bizAccount.Zone.tsx`
|
|
30
|
+
|
|
31
|
+
### Basic Structure
|
|
32
|
+
|
|
33
|
+
```tsx
|
|
34
|
+
"use client";
|
|
35
|
+
|
|
36
|
+
import { Load, Data } from "@shared/ui";
|
|
37
|
+
import { ModelsProps } from "@akanjs/client";
|
|
38
|
+
import { ClientInit, ClientView } from "@akanjs/signal";
|
|
39
|
+
import { Model } from "./index";
|
|
40
|
+
|
|
41
|
+
export const Admin = ({ sliceName = "model", init, query }: ModelsProps<cnst.Model>) => {
|
|
42
|
+
return (
|
|
43
|
+
<Data.ListContainer
|
|
44
|
+
init={init}
|
|
45
|
+
query={query}
|
|
46
|
+
sliceName={sliceName}
|
|
47
|
+
renderItem={Model.Unit.Card}
|
|
48
|
+
renderTemplate={Model.Template.General}
|
|
49
|
+
renderView={(model) => <Model.View.General model={model} />}
|
|
50
|
+
columns={["id", "status", "createdAt"]}
|
|
51
|
+
actions={(model) => ["remove", "edit", "view"]}
|
|
52
|
+
/>
|
|
53
|
+
);
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
export const View = ({ view }: { view: ClientView<"model", cnst.Model> }) => {
|
|
57
|
+
return <Load.View view={view} renderView={(model) => <Model.View.General model={model} />} />;
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
export const Card = ({ className, init }: { className?: string; init: ClientInit<"model", cnst.LightModel> }) => {
|
|
61
|
+
return (
|
|
62
|
+
<Load.Units
|
|
63
|
+
className={className}
|
|
64
|
+
init={init}
|
|
65
|
+
renderItem={(model) => <Model.Unit.Card key={model.id} href={`/model/${model.id}`} model={model} />}
|
|
66
|
+
/>
|
|
67
|
+
);
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
export const Zone = {
|
|
71
|
+
Admin,
|
|
72
|
+
View,
|
|
73
|
+
Card,
|
|
74
|
+
};
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Key Components
|
|
78
|
+
|
|
79
|
+
Every Model.Zone.tsx file typically exports several named components and a Zone namespace:
|
|
80
|
+
|
|
81
|
+
1. **Admin**: For administrative interfaces with CRUD operations
|
|
82
|
+
2. **View**: For detailed views of a single model instance
|
|
83
|
+
3. **Card**: For displaying lists of model items as cards
|
|
84
|
+
4. **Specialized components**: Custom components for specific model needs
|
|
85
|
+
|
|
86
|
+
## Common Zone Component Types
|
|
87
|
+
|
|
88
|
+
### Admin Zone
|
|
89
|
+
|
|
90
|
+
The Admin component typically uses `Data.ListContainer` to provide a complete admin interface for a model:
|
|
91
|
+
|
|
92
|
+
```tsx
|
|
93
|
+
export const Admin = ({ sliceName = "model", init, query }: ModelsProps<cnst.Model>) => {
|
|
94
|
+
return (
|
|
95
|
+
<Data.ListContainer
|
|
96
|
+
init={init}
|
|
97
|
+
query={query}
|
|
98
|
+
sliceName={sliceName}
|
|
99
|
+
renderItem={Model.Unit.Card}
|
|
100
|
+
renderTemplate={Model.Template.General}
|
|
101
|
+
renderView={(model) => <Model.View.General model={model} />}
|
|
102
|
+
columns={["id", "name", "status", "createdAt"]}
|
|
103
|
+
actions={(model) => ["remove", "edit", "view"]}
|
|
104
|
+
/>
|
|
105
|
+
);
|
|
106
|
+
};
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Key features:
|
|
110
|
+
|
|
111
|
+
- Configurable columns and actions
|
|
112
|
+
- Integration with templates for editing
|
|
113
|
+
- Unit components for list display
|
|
114
|
+
- View components for detailed display
|
|
115
|
+
|
|
116
|
+
### View Zone
|
|
117
|
+
|
|
118
|
+
The View component uses `Load.View` to display a single model instance:
|
|
119
|
+
|
|
120
|
+
```tsx
|
|
121
|
+
export const View = ({ view }: { view: ClientView<"model", cnst.Model> }) => {
|
|
122
|
+
return <Load.View view={view} renderView={(model) => <Model.View.General model={model} />} />;
|
|
123
|
+
};
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Key features:
|
|
127
|
+
|
|
128
|
+
- Handles loading states
|
|
129
|
+
- Passes model data to View component
|
|
130
|
+
- Can include additional UI elements or actions
|
|
131
|
+
|
|
132
|
+
### Card Zone
|
|
133
|
+
|
|
134
|
+
The Card component uses `Load.Units` to display lists of model items:
|
|
135
|
+
|
|
136
|
+
```tsx
|
|
137
|
+
export const Card = ({ className, init }: { className?: string; init: ClientInit<"model", cnst.LightModel> }) => {
|
|
138
|
+
return (
|
|
139
|
+
<Load.Units
|
|
140
|
+
className={className}
|
|
141
|
+
init={init}
|
|
142
|
+
renderItem={(model) => <Model.Unit.Card key={model.id} href={`/model/${model.id}`} model={model} />}
|
|
143
|
+
/>
|
|
144
|
+
);
|
|
145
|
+
};
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
Key features:
|
|
149
|
+
|
|
150
|
+
- Handles loading states for lists
|
|
151
|
+
- Maps data to Unit components
|
|
152
|
+
- Can include link wrapping or other interactions
|
|
153
|
+
- Supports className for styling flexibility
|
|
154
|
+
|
|
155
|
+
### Specialized Zone Components
|
|
156
|
+
|
|
157
|
+
Many models have specialized Zone components for specific use cases:
|
|
158
|
+
|
|
159
|
+
```tsx
|
|
160
|
+
export const Recommendations = ({
|
|
161
|
+
className,
|
|
162
|
+
init,
|
|
163
|
+
}: {
|
|
164
|
+
className?: string;
|
|
165
|
+
init: ClientInit<"model", cnst.LightModel>;
|
|
166
|
+
}) => {
|
|
167
|
+
return (
|
|
168
|
+
<div className={className}>
|
|
169
|
+
<h3 className="mb-2 text-lg font-medium">Recommended For You</h3>
|
|
170
|
+
<Load.Units
|
|
171
|
+
init={init}
|
|
172
|
+
renderItem={(model) => <Model.Unit.Card key={model.id} model={model} variant="compact" />}
|
|
173
|
+
/>
|
|
174
|
+
</div>
|
|
175
|
+
);
|
|
176
|
+
};
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
These specialized components can:
|
|
180
|
+
|
|
181
|
+
- Add specific UI layout or structure
|
|
182
|
+
- Integrate with specific data fetching patterns
|
|
183
|
+
- Implement custom behavior for the model
|
|
184
|
+
- Support specific UI patterns (tabs, carousels, etc.)
|
|
185
|
+
|
|
186
|
+
## Props Patterns and Data Handling
|
|
187
|
+
|
|
188
|
+
### Common Props
|
|
189
|
+
|
|
190
|
+
Zone components typically use these prop patterns:
|
|
191
|
+
|
|
192
|
+
1. **For Admin zones**:
|
|
193
|
+
|
|
194
|
+
```tsx
|
|
195
|
+
{ sliceName?: string, init: ClientInit<model>, query?: QueryProps }
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
2. **For View zones**:
|
|
199
|
+
|
|
200
|
+
```tsx
|
|
201
|
+
{ view: ClientView<model>, className?: string }
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
3. **For Card zones**:
|
|
205
|
+
|
|
206
|
+
```tsx
|
|
207
|
+
{ init: ClientInit<model>, className?: string }
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
4. **For specialized zones**:
|
|
211
|
+
```tsx
|
|
212
|
+
{ init?: ClientInit<model>, view?: ClientView<model>, className?: string, ...customProps }
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### Data Handling
|
|
216
|
+
|
|
217
|
+
Zone components connect with data in several ways:
|
|
218
|
+
|
|
219
|
+
1. **Using ClientInit**: For lists of model data
|
|
220
|
+
|
|
221
|
+
```tsx
|
|
222
|
+
<Load.Units init={init} renderItem={(model) => <Model.Unit.Card model={model} />} />
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
2. **Using ClientView**: For single model instances
|
|
226
|
+
|
|
227
|
+
```tsx
|
|
228
|
+
<Load.View view={view} renderView={(model) => <Model.View.General model={model} />} />
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
3. **Using Data.ListContainer**: For admin interfaces
|
|
232
|
+
```tsx
|
|
233
|
+
<Data.ListContainer init={init} query={query} sliceName={sliceName} ... />
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
## Client Component Patterns and Hooks Usage
|
|
237
|
+
|
|
238
|
+
Model.Zone.tsx files are client components that can use client-side hooks. Always include the `"use client"` directive at the top of the file:
|
|
239
|
+
|
|
240
|
+
```tsx
|
|
241
|
+
"use client";
|
|
242
|
+
|
|
243
|
+
import { useState, useEffect } from "react";
|
|
244
|
+
// ...
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
Common hook patterns in Zone components:
|
|
248
|
+
|
|
249
|
+
1. **useState** for local component state:
|
|
250
|
+
|
|
251
|
+
```tsx
|
|
252
|
+
const [activeTab, setActiveTab] = useState("details");
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
2. **useEffect** for side effects:
|
|
256
|
+
|
|
257
|
+
```tsx
|
|
258
|
+
useEffect(() => {
|
|
259
|
+
if (model.id) {
|
|
260
|
+
// Track view or load additional data
|
|
261
|
+
}
|
|
262
|
+
}, [model.id]);
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
3. **Custom hooks** for reusable logic:
|
|
266
|
+
```tsx
|
|
267
|
+
const { isVisible, toggleVisibility } = useToggle(false);
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
Keep client-side state management focused on UI concerns, not business logic.
|
|
271
|
+
|
|
272
|
+
## Integration with Page Components and Data Fetching
|
|
273
|
+
|
|
274
|
+
Zone components are typically used within page.tsx files using the Load.Page pattern:
|
|
275
|
+
|
|
276
|
+
```tsx
|
|
277
|
+
// app/[lang]/(app)/model/page.tsx
|
|
278
|
+
import { Load } from "@shared/ui";
|
|
279
|
+
import { fetch } from "@akanjs/signal";
|
|
280
|
+
import { Model } from "@app/lib";
|
|
281
|
+
|
|
282
|
+
export default function ModelPage() {
|
|
283
|
+
return (
|
|
284
|
+
<Load.Page
|
|
285
|
+
loader={async () => {
|
|
286
|
+
const { modelInit } = await fetch.initModel();
|
|
287
|
+
return { modelInit };
|
|
288
|
+
}}
|
|
289
|
+
render={({ modelInit }) => (
|
|
290
|
+
<div className="container mx-auto p-4">
|
|
291
|
+
<Model.Zone.Card init={modelInit} />
|
|
292
|
+
</div>
|
|
293
|
+
)}
|
|
294
|
+
/>
|
|
295
|
+
);
|
|
296
|
+
}
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
For detail pages:
|
|
300
|
+
|
|
301
|
+
```tsx
|
|
302
|
+
// app/[lang]/(app)/model/[modelId]/page.tsx
|
|
303
|
+
export default function ModelDetailPage({ params }: { params: { modelId: string } }) {
|
|
304
|
+
return (
|
|
305
|
+
<Load.Page
|
|
306
|
+
loader={async () => {
|
|
307
|
+
const { modelView } = await fetch.viewModel(params.modelId);
|
|
308
|
+
return { modelView };
|
|
309
|
+
}}
|
|
310
|
+
render={({ modelView }) => (
|
|
311
|
+
<div className="container mx-auto p-4">
|
|
312
|
+
<Model.Zone.View view={modelView} />
|
|
313
|
+
</div>
|
|
314
|
+
)}
|
|
315
|
+
/>
|
|
316
|
+
);
|
|
317
|
+
}
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
## Composition with Other Model Components
|
|
321
|
+
|
|
322
|
+
Zone components compose and orchestrate other model components:
|
|
323
|
+
|
|
324
|
+
1. **Using View components** for detailed displays:
|
|
325
|
+
|
|
326
|
+
```tsx
|
|
327
|
+
<Model.View.General model={model} />
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
2. **Using Unit components** for list items:
|
|
331
|
+
|
|
332
|
+
```tsx
|
|
333
|
+
<Model.Unit.Card model={model} />
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
3. **Using Template components** for forms:
|
|
337
|
+
|
|
338
|
+
```tsx
|
|
339
|
+
<Model.Template.General model={model} onSubmit={handleSubmit} />
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
4. **Using Util components** for actions and helpers:
|
|
343
|
+
```tsx
|
|
344
|
+
<Model.Util.ActionButtons model={model} />
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
This composition creates a consistent UI pattern across your application.
|
|
348
|
+
|
|
349
|
+
## Best Practices and Implementation Guidelines
|
|
350
|
+
|
|
351
|
+
### Do's
|
|
352
|
+
|
|
353
|
+
1. **Keep Zone components focused on presentation**
|
|
354
|
+
|
|
355
|
+
- Delegate business logic to services and signals
|
|
356
|
+
- Use Zone components as composition layers, not logic containers
|
|
357
|
+
|
|
358
|
+
2. **Use consistent naming and exports**
|
|
359
|
+
|
|
360
|
+
- Export named components for specific use cases (Admin, View, Card)
|
|
361
|
+
- Export a Zone namespace for easy import
|
|
362
|
+
|
|
363
|
+
3. **Provide styling flexibility**
|
|
364
|
+
|
|
365
|
+
- Accept className props and pass them to container elements
|
|
366
|
+
- Use Tailwind CSS for consistent styling
|
|
367
|
+
|
|
368
|
+
4. **Create specialized Zone components as needed**
|
|
369
|
+
|
|
370
|
+
- Implement custom Zone components for specific UI patterns
|
|
371
|
+
- Reuse common patterns across models
|
|
372
|
+
|
|
373
|
+
5. **Leverage Load components for data handling**
|
|
374
|
+
- Use Load.Units, Load.View, and Data.ListContainer for consistent data handling
|
|
375
|
+
- Handle loading states consistently
|
|
376
|
+
|
|
377
|
+
### Don'ts
|
|
378
|
+
|
|
379
|
+
1. **Don't include business logic in Zone components**
|
|
380
|
+
|
|
381
|
+
- Keep data transformation and business rules in services and signals
|
|
382
|
+
- Zone components should focus on rendering and composition
|
|
383
|
+
|
|
384
|
+
2. **Don't fetch data directly in Zone components**
|
|
385
|
+
|
|
386
|
+
- Data fetching should happen in page components or services
|
|
387
|
+
- Zone components should receive data via props
|
|
388
|
+
|
|
389
|
+
3. **Don't create overly complex Zone components**
|
|
390
|
+
|
|
391
|
+
- Break down complex UIs into smaller, composable components
|
|
392
|
+
- Use specialized Zone components for different aspects of the model
|
|
393
|
+
|
|
394
|
+
4. **Don't duplicate code across Zone components**
|
|
395
|
+
|
|
396
|
+
- Extract common patterns into reusable components
|
|
397
|
+
- Use composition to create variation
|
|
398
|
+
|
|
399
|
+
5. **Don't mix client and server components incorrectly**
|
|
400
|
+
- Remember that Zone components are client components
|
|
401
|
+
- Import server components carefully to avoid errors
|
|
402
|
+
|
|
403
|
+
## Advanced Zone Patterns
|
|
404
|
+
|
|
405
|
+
### Conditional Rendering in Zones
|
|
406
|
+
|
|
407
|
+
```tsx
|
|
408
|
+
export const Card = ({
|
|
409
|
+
className,
|
|
410
|
+
init,
|
|
411
|
+
variant = "default",
|
|
412
|
+
}: {
|
|
413
|
+
className?: string;
|
|
414
|
+
init: ClientInit<"model", cnst.LightModel>;
|
|
415
|
+
variant?: "default" | "compact" | "extended";
|
|
416
|
+
}) => {
|
|
417
|
+
return (
|
|
418
|
+
<Load.Units
|
|
419
|
+
className={className}
|
|
420
|
+
init={init}
|
|
421
|
+
renderItem={(model) => {
|
|
422
|
+
switch (variant) {
|
|
423
|
+
case "compact":
|
|
424
|
+
return <Model.Unit.CompactCard key={model.id} model={model} />;
|
|
425
|
+
case "extended":
|
|
426
|
+
return <Model.Unit.ExtendedCard key={model.id} model={model} />;
|
|
427
|
+
default:
|
|
428
|
+
return <Model.Unit.Card key={model.id} model={model} />;
|
|
429
|
+
}
|
|
430
|
+
}}
|
|
431
|
+
/>
|
|
432
|
+
);
|
|
433
|
+
};
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
### Composition with Other Zones
|
|
437
|
+
|
|
438
|
+
```tsx
|
|
439
|
+
export const Dashboard = ({ className }: { className?: string }) => {
|
|
440
|
+
return (
|
|
441
|
+
<div className={className}>
|
|
442
|
+
<div className="grid grid-cols-1 gap-4 md:grid-cols-2">
|
|
443
|
+
<Load.Page
|
|
444
|
+
loader={async () => {
|
|
445
|
+
const { modelAInit } = await fetch.initModelA();
|
|
446
|
+
const { modelBInit } = await fetch.initModelB();
|
|
447
|
+
return { modelAInit, modelBInit };
|
|
448
|
+
}}
|
|
449
|
+
render={({ modelAInit, modelBInit }) => (
|
|
450
|
+
<>
|
|
451
|
+
<ModelA.Zone.Card init={modelAInit} className="col-span-1" />
|
|
452
|
+
<ModelB.Zone.Card init={modelBInit} className="col-span-1" />
|
|
453
|
+
</>
|
|
454
|
+
)}
|
|
455
|
+
/>
|
|
456
|
+
</div>
|
|
457
|
+
</div>
|
|
458
|
+
);
|
|
459
|
+
};
|
|
460
|
+
```
|
|
461
|
+
|
|
462
|
+
### Real-time Data Integration
|
|
463
|
+
|
|
464
|
+
```tsx
|
|
465
|
+
"use client";
|
|
466
|
+
|
|
467
|
+
import { useEffect } from "react";
|
|
468
|
+
import { Load } from "@shared/ui";
|
|
469
|
+
import { fetch, subscriptions } from "@akanjs/signal";
|
|
470
|
+
|
|
471
|
+
export const LiveFeed = ({ className, init }: { className?: string; init: ClientInit<"model", cnst.LightModel> }) => {
|
|
472
|
+
useEffect(() => {
|
|
473
|
+
const unsubscribe = subscriptions.subscribeToModelUpdates();
|
|
474
|
+
return () => unsubscribe();
|
|
475
|
+
}, []);
|
|
476
|
+
|
|
477
|
+
return (
|
|
478
|
+
<div className={className}>
|
|
479
|
+
<h3 className="mb-2 text-lg font-medium">Live Updates</h3>
|
|
480
|
+
<Load.Units init={init} renderItem={(model) => <Model.Unit.Card key={model.id} model={model} />} />
|
|
481
|
+
</div>
|
|
482
|
+
);
|
|
483
|
+
};
|
|
484
|
+
```
|
|
485
|
+
|
|
486
|
+
## Troubleshooting
|
|
487
|
+
|
|
488
|
+
### Common Issues
|
|
489
|
+
|
|
490
|
+
1. **"Error: Client Component Cannot Be Rendered on Server"**
|
|
491
|
+
|
|
492
|
+
- Make sure your Zone component has `"use client"` at the top
|
|
493
|
+
- Check that you're not using server components inside client components
|
|
494
|
+
|
|
495
|
+
2. **"Props Validation Failed"**
|
|
496
|
+
|
|
497
|
+
- Ensure you're passing the correct data structure to Zone components
|
|
498
|
+
- Check the types for ClientInit and ClientView
|
|
499
|
+
|
|
500
|
+
3. **"Component is Not Rendering Correctly"**
|
|
501
|
+
|
|
502
|
+
- Verify that the underlying Unit/View components are implemented correctly
|
|
503
|
+
- Check that you're passing the required props
|
|
504
|
+
|
|
505
|
+
4. **"Data Not Loading"**
|
|
506
|
+
- Confirm that the data fetching in the page component is working
|
|
507
|
+
- Check that you're using the correct Load component (Units, View)
|
|
508
|
+
|
|
509
|
+
### Debugging Tips
|
|
510
|
+
|
|
511
|
+
- Use the React DevTools to inspect component props and state
|
|
512
|
+
- Check the Network tab for API requests
|
|
513
|
+
- Add console.log statements to verify data flow
|
|
514
|
+
- Test Zone components in isolation
|
|
515
|
+
|
|
516
|
+
## Conclusion
|
|
517
|
+
|
|
518
|
+
Model.Zone.tsx files are crucial container components in Akan.js that bridge the gap between page components and UI components. By following the patterns and practices in this guide, you can create consistent, reusable, and maintainable UI components for your application.
|
|
519
|
+
|
|
520
|
+
Key takeaways:
|
|
521
|
+
|
|
522
|
+
1. Zone components are client components that compose other model components
|
|
523
|
+
2. They focus on presentation and composition, not business logic
|
|
524
|
+
3. Common patterns include Admin, View, and Card zones
|
|
525
|
+
4. They integrate with Load components for data handling
|
|
526
|
+
5. They provide a consistent interface for displaying model data
|
|
527
|
+
|
|
528
|
+
By leveraging Zone components effectively, you can create a cohesive and consistent user experience across your Akan.js application.
|