sonamu 0.5.7 → 0.6.0
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/api/base-frame.js +12 -2
- package/dist/api/caster.js +66 -2
- package/dist/api/code-converters.js +489 -2
- package/dist/api/config.d.ts +76 -0
- package/dist/api/config.d.ts.map +1 -0
- package/dist/api/config.js +32 -0
- package/dist/api/context.d.ts +1 -0
- package/dist/api/context.d.ts.map +1 -1
- package/dist/api/context.js +3 -2
- package/dist/api/decorators.d.ts.map +1 -1
- package/dist/api/decorators.js +142 -2
- package/dist/api/index.js +9 -2
- package/dist/api/sonamu.d.ts +8 -22
- package/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +482 -2
- package/dist/bin/build-config.d.ts +2 -1
- package/dist/bin/build-config.d.ts.map +1 -1
- package/dist/bin/build-config.js +12 -2
- package/dist/bin/cli-wrapper.js +71 -2
- package/dist/bin/cli.js +418 -2
- package/dist/bin/hot-hook-register.d.ts +11 -0
- package/dist/bin/hot-hook-register.d.ts.map +1 -0
- package/dist/bin/hot-hook-register.js +21 -0
- package/dist/database/_batch_update.js +78 -2
- package/dist/database/base-model.js +247 -2
- package/dist/database/code-generator.js +53 -2
- package/dist/database/db.d.ts +2 -16
- package/dist/database/db.d.ts.map +1 -1
- package/dist/database/db.js +132 -2
- package/dist/database/knex-plugins/knex-on-duplicate-update.js +39 -2
- package/dist/database/puri-wrapper.js +109 -2
- package/dist/database/puri.d.ts +23 -16
- package/dist/database/puri.d.ts.map +1 -1
- package/dist/database/puri.js +539 -2
- package/dist/database/puri.types.d.ts +8 -3
- package/dist/database/puri.types.d.ts.map +1 -1
- package/dist/database/puri.types.js +3 -2
- package/dist/database/transaction-context.js +14 -2
- package/dist/database/upsert-builder.js +215 -2
- package/dist/entity/entity-manager.d.ts +3 -1
- package/dist/entity/entity-manager.d.ts.map +1 -1
- package/dist/entity/entity-manager.js +114 -2
- package/dist/entity/entity-utils.js +210 -2
- package/dist/entity/entity.d.ts.map +1 -1
- package/dist/entity/entity.js +651 -2
- package/dist/exceptions/error-handler.js +29 -2
- package/dist/exceptions/so-exceptions.js +85 -2
- package/dist/file-storage/driver.js +79 -2
- package/dist/file-storage/file-storage.js +75 -2
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -2
- package/dist/migration/code-generation.js +558 -2
- package/dist/migration/migration-set.js +364 -2
- package/dist/migration/migrator.d.ts +0 -9
- package/dist/migration/migrator.d.ts.map +1 -1
- package/dist/migration/migrator.js +510 -2
- package/dist/migration/types.js +3 -2
- package/dist/naite/naite.d.ts +12 -0
- package/dist/naite/naite.d.ts.map +1 -0
- package/dist/naite/naite.js +72 -0
- package/dist/stream/index.js +3 -2
- package/dist/stream/sse.js +38 -2
- package/dist/syncer/api-parser.d.ts +20 -0
- package/dist/syncer/api-parser.d.ts.map +1 -0
- package/dist/syncer/api-parser.js +229 -0
- package/dist/syncer/checksum.d.ts +21 -0
- package/dist/syncer/checksum.d.ts.map +1 -0
- package/dist/syncer/checksum.js +98 -0
- package/dist/syncer/code-generator.d.ts +20 -0
- package/dist/syncer/code-generator.d.ts.map +1 -0
- package/dist/syncer/code-generator.js +141 -0
- package/dist/syncer/entity-operations.d.ts +17 -0
- package/dist/syncer/entity-operations.d.ts.map +1 -0
- package/dist/syncer/entity-operations.js +58 -0
- package/dist/syncer/file-patterns.d.ts +29 -0
- package/dist/syncer/file-patterns.d.ts.map +1 -0
- package/dist/syncer/file-patterns.js +38 -0
- package/dist/syncer/index.d.ts +6 -0
- package/dist/syncer/index.d.ts.map +1 -1
- package/dist/syncer/index.js +9 -2
- package/dist/syncer/module-loader.d.ts +35 -0
- package/dist/syncer/module-loader.d.ts.map +1 -0
- package/dist/syncer/module-loader.js +82 -0
- package/dist/syncer/syncer.d.ts +93 -108
- package/dist/syncer/syncer.d.ts.map +1 -1
- package/dist/syncer/syncer.js +375 -2
- package/dist/template/entity-converter.d.ts +14 -0
- package/dist/template/entity-converter.d.ts.map +1 -0
- package/dist/template/entity-converter.js +101 -0
- package/dist/template/helpers.d.ts +23 -0
- package/dist/template/helpers.d.ts.map +1 -0
- package/dist/template/helpers.js +64 -0
- package/dist/{templates → template/implementations}/entity.template.d.ts +3 -3
- package/dist/template/implementations/entity.template.d.ts.map +1 -0
- package/dist/template/implementations/entity.template.js +87 -0
- package/dist/{templates → template/implementations}/generated.template.d.ts +3 -3
- package/dist/template/implementations/generated.template.d.ts.map +1 -0
- package/dist/template/implementations/generated.template.js +232 -0
- package/dist/{templates → template/implementations}/generated_http.template.d.ts +3 -3
- package/dist/template/implementations/generated_http.template.d.ts.map +1 -0
- package/dist/template/implementations/generated_http.template.js +131 -0
- package/dist/{templates → template/implementations}/generated_sso.template.d.ts +3 -3
- package/dist/template/implementations/generated_sso.template.d.ts.map +1 -0
- package/dist/template/implementations/generated_sso.template.js +105 -0
- package/dist/{templates → template/implementations}/init_types.template.d.ts +3 -3
- package/dist/template/implementations/init_types.template.d.ts.map +1 -0
- package/dist/template/implementations/init_types.template.js +38 -0
- package/dist/template/implementations/model.template.d.ts +17 -0
- package/dist/template/implementations/model.template.d.ts.map +1 -0
- package/dist/template/implementations/model.template.js +171 -0
- package/dist/{templates → template/implementations}/model_test.template.d.ts +3 -3
- package/dist/template/implementations/model_test.template.d.ts.map +1 -0
- package/dist/template/implementations/model_test.template.js +35 -0
- package/dist/{templates → template/implementations}/service.template.d.ts +6 -6
- package/dist/template/implementations/service.template.d.ts.map +1 -0
- package/dist/template/implementations/service.template.js +193 -0
- package/dist/{templates → template/implementations}/view_enums_buttonset.template.d.ts +3 -3
- package/dist/template/implementations/view_enums_buttonset.template.d.ts.map +1 -0
- package/dist/template/implementations/view_enums_buttonset.template.js +31 -0
- package/dist/{templates → template/implementations}/view_enums_dropdown.template.d.ts +3 -4
- package/dist/template/implementations/view_enums_dropdown.template.d.ts.map +1 -0
- package/dist/template/implementations/view_enums_dropdown.template.js +50 -0
- package/dist/{templates → template/implementations}/view_enums_select.template.d.ts +3 -3
- package/dist/template/implementations/view_enums_select.template.d.ts.map +1 -0
- package/dist/template/implementations/view_enums_select.template.js +55 -0
- package/dist/{templates → template/implementations}/view_form.template.d.ts +5 -5
- package/dist/template/implementations/view_form.template.d.ts.map +1 -0
- package/dist/template/implementations/view_form.template.js +337 -0
- package/dist/{templates → template/implementations}/view_id_all_select.template.d.ts +3 -3
- package/dist/template/implementations/view_id_all_select.template.d.ts.map +1 -0
- package/dist/template/implementations/view_id_all_select.template.js +31 -0
- package/dist/{templates → template/implementations}/view_id_async_select.template.d.ts +3 -3
- package/dist/template/implementations/view_id_async_select.template.d.ts.map +1 -0
- package/dist/template/implementations/view_id_async_select.template.js +105 -0
- package/dist/{templates → template/implementations}/view_list.template.d.ts +5 -13
- package/dist/template/implementations/view_list.template.d.ts.map +1 -0
- package/dist/template/implementations/view_list.template.js +465 -0
- package/dist/{templates → template/implementations}/view_list_columns.template.d.ts +3 -3
- package/dist/template/implementations/view_list_columns.template.d.ts.map +1 -0
- package/dist/template/implementations/view_list_columns.template.js +49 -0
- package/dist/{templates → template/implementations}/view_search_input.template.d.ts +3 -3
- package/dist/template/implementations/view_search_input.template.d.ts.map +1 -0
- package/dist/template/implementations/view_search_input.template.js +64 -0
- package/dist/template/index.d.ts +5 -0
- package/dist/template/index.d.ts.map +1 -0
- package/dist/template/index.js +6 -0
- package/dist/template/template.d.ts +39 -0
- package/dist/template/template.d.ts.map +1 -0
- package/dist/template/template.js +47 -0
- package/dist/template/zod-converter.d.ts +18 -0
- package/dist/template/zod-converter.d.ts.map +1 -0
- package/dist/template/zod-converter.js +166 -0
- package/dist/testing/_relation-graph.js +80 -2
- package/dist/testing/fixture-manager.d.ts.map +1 -1
- package/dist/testing/fixture-manager.js +521 -2
- package/dist/types/types.d.ts +39 -40
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/types.js +289 -2
- package/dist/typings/knex.d.js +3 -2
- package/dist/utils/async-utils.d.ts +7 -0
- package/dist/utils/async-utils.d.ts.map +1 -1
- package/dist/utils/async-utils.js +57 -2
- package/dist/utils/console-util.d.ts +2 -0
- package/dist/utils/console-util.d.ts.map +1 -0
- package/dist/utils/console-util.js +6 -0
- package/dist/utils/controller.js +26 -2
- package/dist/utils/esm-utils.d.ts +45 -0
- package/dist/utils/esm-utils.d.ts.map +1 -0
- package/dist/utils/esm-utils.js +56 -0
- package/dist/utils/fs-utils.js +17 -2
- package/dist/utils/lodash-able.js +6 -2
- package/dist/utils/model.js +22 -2
- package/dist/utils/path-utils.d.ts +89 -0
- package/dist/utils/path-utils.d.ts.map +1 -0
- package/dist/utils/path-utils.js +60 -0
- package/dist/utils/process-utils.d.ts +13 -0
- package/dist/utils/process-utils.d.ts.map +1 -0
- package/dist/utils/process-utils.js +36 -0
- package/dist/utils/sql-parser.js +35 -2
- package/dist/utils/utils.d.ts +4 -7
- package/dist/utils/utils.d.ts.map +1 -1
- package/dist/utils/utils.js +33 -2
- package/dist/utils/zod-error.d.ts.map +1 -1
- package/dist/utils/zod-error.js +19 -2
- package/package.json +21 -8
- package/src/api/code-converters.ts +2 -2
- package/src/api/config.ts +142 -0
- package/src/api/context.ts +1 -0
- package/src/api/decorators.ts +1 -0
- package/src/api/sonamu.ts +81 -67
- package/src/bin/build-config.ts +2 -1
- package/src/bin/cli-wrapper.ts +10 -3
- package/src/bin/cli.ts +108 -56
- package/src/bin/hot-hook-register.ts +22 -0
- package/src/database/base-model.ts +1 -1
- package/src/database/code-generator.ts +1 -1
- package/src/database/db.ts +10 -52
- package/src/database/puri.ts +78 -53
- package/src/database/puri.types.ts +18 -5
- package/src/database/upsert-builder.ts +1 -1
- package/src/entity/entity-manager.ts +19 -15
- package/src/entity/entity.ts +4 -3
- package/src/index.ts +2 -0
- package/src/migration/code-generation.ts +1 -1
- package/src/migration/migration-set.ts +1 -1
- package/src/migration/migrator.ts +23 -152
- package/src/naite/naite.ts +70 -0
- package/src/syncer/api-parser.ts +299 -0
- package/src/syncer/checksum.ts +152 -0
- package/src/syncer/code-generator.ts +202 -0
- package/src/syncer/entity-operations.ts +68 -0
- package/src/syncer/file-patterns.ts +56 -0
- package/src/syncer/index.ts +6 -0
- package/src/syncer/module-loader.ts +125 -0
- package/src/syncer/syncer.ts +363 -1420
- package/src/template/entity-converter.ts +123 -0
- package/src/template/helpers.ts +84 -0
- package/src/{templates → template/implementations}/entity.template.ts +4 -4
- package/src/{templates → template/implementations}/generated.template.ts +9 -9
- package/src/{templates → template/implementations}/generated_http.template.ts +9 -6
- package/src/{templates → template/implementations}/generated_sso.template.ts +7 -7
- package/src/{templates → template/implementations}/init_types.template.ts +4 -4
- package/src/{templates → template/implementations}/model.template.ts +9 -9
- package/src/{templates → template/implementations}/model_test.template.ts +5 -5
- package/src/{templates → template/implementations}/service.template.ts +19 -11
- package/src/{templates → template/implementations}/view_enums_buttonset.template.ts +3 -3
- package/src/{templates → template/implementations}/view_enums_dropdown.template.ts +5 -21
- package/src/{templates → template/implementations}/view_enums_select.template.ts +4 -4
- package/src/{templates → template/implementations}/view_form.template.ts +11 -13
- package/src/{templates → template/implementations}/view_id_all_select.template.ts +3 -3
- package/src/{templates → template/implementations}/view_id_async_select.template.ts +3 -3
- package/src/{templates → template/implementations}/view_list.template.ts +13 -64
- package/src/{templates → template/implementations}/view_list_columns.template.ts +3 -3
- package/src/{templates → template/implementations}/view_search_input.template.ts +3 -3
- package/src/template/index.ts +4 -0
- package/src/template/template.ts +86 -0
- package/src/template/zod-converter.ts +219 -0
- package/src/testing/fixture-manager.ts +8 -1
- package/src/types/types.ts +38 -61
- package/src/utils/async-utils.ts +17 -0
- package/src/utils/console-util.ts +4 -0
- package/src/utils/esm-utils.ts +69 -0
- package/src/utils/path-utils.ts +102 -0
- package/src/utils/process-utils.ts +46 -0
- package/src/utils/sql-parser.ts +1 -1
- package/src/utils/utils.ts +14 -40
- package/src/utils/zod-error.ts +0 -1
- package/dist/api/base-frame.js.map +0 -1
- package/dist/api/caster.js.map +0 -1
- package/dist/api/code-converters.js.map +0 -1
- package/dist/api/context.js.map +0 -1
- package/dist/api/decorators.js.map +0 -1
- package/dist/api/index.js.map +0 -1
- package/dist/api/sonamu.js.map +0 -1
- package/dist/bin/build-config.js.map +0 -1
- package/dist/bin/cli-wrapper.js.map +0 -1
- package/dist/bin/cli.js.map +0 -1
- package/dist/database/_batch_update.js.map +0 -1
- package/dist/database/base-model.js.map +0 -1
- package/dist/database/code-generator.js.map +0 -1
- package/dist/database/db.js.map +0 -1
- package/dist/database/knex-plugins/knex-on-duplicate-update.js.map +0 -1
- package/dist/database/puri-wrapper.js.map +0 -1
- package/dist/database/puri.js.map +0 -1
- package/dist/database/puri.types.js.map +0 -1
- package/dist/database/transaction-context.js.map +0 -1
- package/dist/database/upsert-builder.js.map +0 -1
- package/dist/entity/entity-manager.js.map +0 -1
- package/dist/entity/entity-utils.js.map +0 -1
- package/dist/entity/entity.js.map +0 -1
- package/dist/exceptions/error-handler.js.map +0 -1
- package/dist/exceptions/so-exceptions.js.map +0 -1
- package/dist/file-storage/driver.js.map +0 -1
- package/dist/file-storage/file-storage.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/migration/code-generation.js.map +0 -1
- package/dist/migration/migration-set.js.map +0 -1
- package/dist/migration/migrator.js.map +0 -1
- package/dist/migration/types.js.map +0 -1
- package/dist/stream/index.js.map +0 -1
- package/dist/stream/sse.js.map +0 -1
- package/dist/syncer/index.js.map +0 -1
- package/dist/syncer/syncer.js.map +0 -1
- package/dist/templates/base-template.d.ts +0 -13
- package/dist/templates/base-template.d.ts.map +0 -1
- package/dist/templates/base-template.js +0 -2
- package/dist/templates/base-template.js.map +0 -1
- package/dist/templates/entity.template.d.ts.map +0 -1
- package/dist/templates/entity.template.js +0 -2
- package/dist/templates/entity.template.js.map +0 -1
- package/dist/templates/generated.template.d.ts.map +0 -1
- package/dist/templates/generated.template.js +0 -2
- package/dist/templates/generated.template.js.map +0 -1
- package/dist/templates/generated_http.template.d.ts.map +0 -1
- package/dist/templates/generated_http.template.js +0 -2
- package/dist/templates/generated_http.template.js.map +0 -1
- package/dist/templates/generated_sso.template.d.ts.map +0 -1
- package/dist/templates/generated_sso.template.js +0 -2
- package/dist/templates/generated_sso.template.js.map +0 -1
- package/dist/templates/index.d.ts +0 -2
- package/dist/templates/index.d.ts.map +0 -1
- package/dist/templates/index.js +0 -2
- package/dist/templates/index.js.map +0 -1
- package/dist/templates/init_types.template.d.ts.map +0 -1
- package/dist/templates/init_types.template.js +0 -2
- package/dist/templates/init_types.template.js.map +0 -1
- package/dist/templates/model.template.d.ts +0 -17
- package/dist/templates/model.template.d.ts.map +0 -1
- package/dist/templates/model.template.js +0 -2
- package/dist/templates/model.template.js.map +0 -1
- package/dist/templates/model_test.template.d.ts.map +0 -1
- package/dist/templates/model_test.template.js +0 -2
- package/dist/templates/model_test.template.js.map +0 -1
- package/dist/templates/service.template.d.ts.map +0 -1
- package/dist/templates/service.template.js +0 -2
- package/dist/templates/service.template.js.map +0 -1
- package/dist/templates/view_enums_buttonset.template.d.ts.map +0 -1
- package/dist/templates/view_enums_buttonset.template.js +0 -2
- package/dist/templates/view_enums_buttonset.template.js.map +0 -1
- package/dist/templates/view_enums_dropdown.template.d.ts.map +0 -1
- package/dist/templates/view_enums_dropdown.template.js +0 -2
- package/dist/templates/view_enums_dropdown.template.js.map +0 -1
- package/dist/templates/view_enums_select.template.d.ts.map +0 -1
- package/dist/templates/view_enums_select.template.js +0 -2
- package/dist/templates/view_enums_select.template.js.map +0 -1
- package/dist/templates/view_form.template.d.ts.map +0 -1
- package/dist/templates/view_form.template.js +0 -2
- package/dist/templates/view_form.template.js.map +0 -1
- package/dist/templates/view_id_all_select.template.d.ts.map +0 -1
- package/dist/templates/view_id_all_select.template.js +0 -2
- package/dist/templates/view_id_all_select.template.js.map +0 -1
- package/dist/templates/view_id_async_select.template.d.ts.map +0 -1
- package/dist/templates/view_id_async_select.template.js +0 -2
- package/dist/templates/view_id_async_select.template.js.map +0 -1
- package/dist/templates/view_list.template.d.ts.map +0 -1
- package/dist/templates/view_list.template.js +0 -2
- package/dist/templates/view_list.template.js.map +0 -1
- package/dist/templates/view_list_columns.template.d.ts.map +0 -1
- package/dist/templates/view_list_columns.template.js +0 -2
- package/dist/templates/view_list_columns.template.js.map +0 -1
- package/dist/templates/view_search_input.template.d.ts.map +0 -1
- package/dist/templates/view_search_input.template.js +0 -2
- package/dist/templates/view_search_input.template.js.map +0 -1
- package/dist/testing/_relation-graph.js.map +0 -1
- package/dist/testing/fixture-manager.js.map +0 -1
- package/dist/types/types.js.map +0 -1
- package/dist/typings/knex.d.js.map +0 -1
- package/dist/utils/async-utils.js.map +0 -1
- package/dist/utils/controller.js.map +0 -1
- package/dist/utils/fs-utils.js.map +0 -1
- package/dist/utils/lodash-able.js.map +0 -1
- package/dist/utils/model.js.map +0 -1
- package/dist/utils/sql-parser.js.map +0 -1
- package/dist/utils/utils.js.map +0 -1
- package/dist/utils/zod-error.js.map +0 -1
- package/src/templates/base-template.ts +0 -19
- package/src/templates/index.ts +0 -1
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
import inflection from "inflection";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { EntityManager } from "../../entity/entity-manager.js";
|
|
4
|
+
import { Template } from "../template.js";
|
|
5
|
+
import { getRelationPropFromColName, getEnumInfoFromColName } from "../helpers.js";
|
|
6
|
+
import * as _ from "lodash-es";
|
|
7
|
+
import { getZodTypeById, zodTypeToRenderingNode } from "../zod-converter.js";
|
|
8
|
+
export class Template__view_form extends Template {
|
|
9
|
+
constructor(){
|
|
10
|
+
super("view_form");
|
|
11
|
+
}
|
|
12
|
+
getTargetAndPath(names) {
|
|
13
|
+
return {
|
|
14
|
+
target: "web/src/pages/admin",
|
|
15
|
+
path: `${names.fsPlural}/form.tsx`
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
wrapFC(body, label) {
|
|
19
|
+
return [
|
|
20
|
+
`<Form.Field>${label ? `\n <label>${label}</label>` : ""}`,
|
|
21
|
+
body,
|
|
22
|
+
`</Form.Field>`
|
|
23
|
+
].join("\n");
|
|
24
|
+
}
|
|
25
|
+
wrapFG(body, label) {
|
|
26
|
+
return [
|
|
27
|
+
`<Form.Group widths="equal">`,
|
|
28
|
+
this.wrapFC(body, label),
|
|
29
|
+
`</Form.Group>`
|
|
30
|
+
].join("\n");
|
|
31
|
+
}
|
|
32
|
+
renderColumnImport(entityId, col) {
|
|
33
|
+
if (col.renderType === "enums") {
|
|
34
|
+
const { id, targetEntityNames } = getEnumInfoFromColName(entityId, col.name);
|
|
35
|
+
const componentId = `${id}Select`;
|
|
36
|
+
return `import { ${componentId} } from "src/components/${targetEntityNames.fs}/${componentId}";`;
|
|
37
|
+
} else if (col.renderType === "number-fk_id") {
|
|
38
|
+
try {
|
|
39
|
+
const relProp = getRelationPropFromColName(entityId, col.name.replace("_id", ""));
|
|
40
|
+
const targetNames = EntityManager.getNamesFromId(relProp.with);
|
|
41
|
+
const componentId = `${relProp.with}IdAsyncSelect`;
|
|
42
|
+
return `import { ${componentId} } from "src/components/${targetNames.fs}/${componentId}";`;
|
|
43
|
+
} catch {
|
|
44
|
+
return "";
|
|
45
|
+
}
|
|
46
|
+
} else {
|
|
47
|
+
throw new Error(`렌더 불가능한 임포트 ${col.name} ${col.renderType}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
renderColumn(entityId, col, names, parent = "") {
|
|
51
|
+
let regExpr = "";
|
|
52
|
+
regExpr = `{...register(\`${parent}${col.name}\`)}`;
|
|
53
|
+
switch(col.renderType){
|
|
54
|
+
case "string-plain":
|
|
55
|
+
if (col.zodType instanceof z.ZodString && (col.zodType.maxLength ?? 0) <= 512) {
|
|
56
|
+
return `<Input placeholder="${col.label}" ${regExpr} />`;
|
|
57
|
+
} else {
|
|
58
|
+
return `<TextArea rows={8} placeholder="${col.label}" ${regExpr} />`;
|
|
59
|
+
}
|
|
60
|
+
case "datetime":
|
|
61
|
+
return `<Input type="datetime-local" ${regExpr} />`;
|
|
62
|
+
case "string-datetime":
|
|
63
|
+
return `<SQLDateTimeInput ${regExpr} />`;
|
|
64
|
+
case "string-date":
|
|
65
|
+
return `<SQLDateInput ${regExpr} />`;
|
|
66
|
+
case "number-id":
|
|
67
|
+
return `<input type="hidden" ${regExpr} />`;
|
|
68
|
+
case "number-plain":
|
|
69
|
+
return `<NumberInput placeholder="${col.label}" ${regExpr} />`;
|
|
70
|
+
case "boolean":
|
|
71
|
+
return `<BooleanToggle ${regExpr} />`;
|
|
72
|
+
case "string-image":
|
|
73
|
+
return `<ImageUploader multiple={false} ${regExpr} />`;
|
|
74
|
+
case "array-images":
|
|
75
|
+
return `<ImageUploader multiple={true} ${regExpr} maxSize={5} />`;
|
|
76
|
+
case "enums":
|
|
77
|
+
try {
|
|
78
|
+
let enumId;
|
|
79
|
+
if (col.name === "orderBy") {
|
|
80
|
+
enumId = `${names.capital}${inflection.camelize(col.name)}Select`;
|
|
81
|
+
} else {
|
|
82
|
+
const { id } = getEnumInfoFromColName(entityId, col.name);
|
|
83
|
+
enumId = `${id}Select`;
|
|
84
|
+
}
|
|
85
|
+
return `<${enumId} ${regExpr} ${col.optional || col.nullable ? "clearable" : ""} textPrefix="" />`;
|
|
86
|
+
} catch {
|
|
87
|
+
return `<>찾을 수 없는 Enum ${col.name}</>`;
|
|
88
|
+
}
|
|
89
|
+
case "number-fk_id":
|
|
90
|
+
try {
|
|
91
|
+
const relProp = getRelationPropFromColName(entityId, col.name.replace("_id", ""));
|
|
92
|
+
const fkId = `${relProp.with}IdAsyncSelect`;
|
|
93
|
+
return `<${fkId} {...register('${col.name}')} ${col.optional || col.nullable ? "clearable" : ""} subset="A" />`;
|
|
94
|
+
} catch {
|
|
95
|
+
return `<Input ${regExpr} />`;
|
|
96
|
+
}
|
|
97
|
+
case "array":
|
|
98
|
+
return `<>${col.name} array</>`;
|
|
99
|
+
case "object":
|
|
100
|
+
return `<>${col.name} object</>`;
|
|
101
|
+
default:
|
|
102
|
+
throw new Error(`대응 불가능한 렌더 타입 ${col.renderType} on ${col.name}`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
resolveDefaultValue(columns) {
|
|
106
|
+
return columns.reduce((result, col)=>{
|
|
107
|
+
if (col.optional) {
|
|
108
|
+
return result;
|
|
109
|
+
}
|
|
110
|
+
let value;
|
|
111
|
+
if (col.nullable === true) {
|
|
112
|
+
value = null;
|
|
113
|
+
} else if (col.zodType instanceof z.ZodNumber) {
|
|
114
|
+
value = 0;
|
|
115
|
+
} else if (col.zodType instanceof z.ZodEnum) {
|
|
116
|
+
value = Object.keys(col.zodType.options)[0];
|
|
117
|
+
} else if (col.zodType instanceof z.ZodBoolean) {
|
|
118
|
+
value = false;
|
|
119
|
+
} else if (col.zodType instanceof z.ZodDate) {
|
|
120
|
+
value = new Date();
|
|
121
|
+
} else if (col.zodType instanceof z.ZodString) {
|
|
122
|
+
if (col.renderType === "string-datetime") {
|
|
123
|
+
value = "now()";
|
|
124
|
+
} else {
|
|
125
|
+
value = "";
|
|
126
|
+
}
|
|
127
|
+
} else if (col.zodType instanceof z.ZodArray) {
|
|
128
|
+
value = [];
|
|
129
|
+
} else if (col.zodType instanceof z.ZodObject) {
|
|
130
|
+
value = {};
|
|
131
|
+
}
|
|
132
|
+
result[col.name] = value;
|
|
133
|
+
return result;
|
|
134
|
+
}, {});
|
|
135
|
+
}
|
|
136
|
+
async render({ entityId }) {
|
|
137
|
+
const saveParamsZodType = await getZodTypeById(`${entityId}SaveParams`);
|
|
138
|
+
const saveParamsNode = zodTypeToRenderingNode(saveParamsZodType);
|
|
139
|
+
const entity = EntityManager.get(entityId);
|
|
140
|
+
const names = EntityManager.getNamesFromId(entityId);
|
|
141
|
+
const columns = saveParamsNode.children.filter((col)=>col.name !== "id").map((col)=>{
|
|
142
|
+
const propCandidate = entity.props.find((prop)=>prop.name === col.name);
|
|
143
|
+
col.label = propCandidate?.desc ?? col.label;
|
|
144
|
+
return col;
|
|
145
|
+
});
|
|
146
|
+
const defaultValue = this.resolveDefaultValue(columns);
|
|
147
|
+
// 프리 템플릿
|
|
148
|
+
const preTemplates = columns.filter((col)=>{
|
|
149
|
+
if (col.name === "id") {
|
|
150
|
+
return false;
|
|
151
|
+
} else if (col.name.endsWith("_id") || col.renderType === "number-id") {
|
|
152
|
+
try {
|
|
153
|
+
getRelationPropFromColName(entityId, col.name.replace("_id", ""));
|
|
154
|
+
return true;
|
|
155
|
+
} catch {
|
|
156
|
+
return false;
|
|
157
|
+
}
|
|
158
|
+
} else if (col.renderType === "enums") {
|
|
159
|
+
try {
|
|
160
|
+
getEnumInfoFromColName(entityId, col.name);
|
|
161
|
+
return true;
|
|
162
|
+
} catch {
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return false;
|
|
167
|
+
}).map((col)=>{
|
|
168
|
+
let key;
|
|
169
|
+
let targetMdId = entityId;
|
|
170
|
+
let enumId;
|
|
171
|
+
if (col.renderType === "enums") {
|
|
172
|
+
key = "view_enums_select";
|
|
173
|
+
const { targetEntityNames: targetMDNames, id } = getEnumInfoFromColName(entityId, col.name);
|
|
174
|
+
targetMdId = targetMDNames.capital;
|
|
175
|
+
enumId = id;
|
|
176
|
+
} else {
|
|
177
|
+
key = "view_id_async_select";
|
|
178
|
+
const relProp = getRelationPropFromColName(entityId, col.name.replace("_id", ""));
|
|
179
|
+
targetMdId = relProp.with;
|
|
180
|
+
}
|
|
181
|
+
return {
|
|
182
|
+
key: key,
|
|
183
|
+
options: {
|
|
184
|
+
entityId: targetMdId,
|
|
185
|
+
node: col,
|
|
186
|
+
enumId
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
}).filter((preTemplate)=>{
|
|
190
|
+
if (preTemplate.key === "view_id_async_select") {
|
|
191
|
+
try {
|
|
192
|
+
EntityManager.get(preTemplate.options.entityId);
|
|
193
|
+
return true;
|
|
194
|
+
} catch {
|
|
195
|
+
return false;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return true;
|
|
199
|
+
});
|
|
200
|
+
return {
|
|
201
|
+
...this.getTargetAndPath(names),
|
|
202
|
+
body: `
|
|
203
|
+
import React, { useEffect, useState, Dispatch, SetStateAction, forwardRef, Ref, useImperativeHandle, useCallback } from 'react';
|
|
204
|
+
import { useSearchParams } from 'react-router-dom';
|
|
205
|
+
import {
|
|
206
|
+
Button,
|
|
207
|
+
Checkbox,
|
|
208
|
+
Form,
|
|
209
|
+
Header,
|
|
210
|
+
Input,
|
|
211
|
+
Segment,
|
|
212
|
+
TextArea,
|
|
213
|
+
Label,
|
|
214
|
+
} from 'semantic-ui-react';
|
|
215
|
+
import { DateTime } from "luxon";
|
|
216
|
+
|
|
217
|
+
import { BackLink, LinkInput, NumberInput, BooleanToggle, SQLDateTimeInput, SQLDateInput, useTypeForm, useGoBack, formatDateTime } from "@sonamu-kit/react-sui";
|
|
218
|
+
import { defaultCatch } from 'src/services/sonamu.shared';
|
|
219
|
+
// import { ImageUploader } from 'src/admin-common/ImageUploader';
|
|
220
|
+
// import { useCommonModal } from "src/admin-common/CommonModal";
|
|
221
|
+
|
|
222
|
+
import { ${names.capital}SaveParams } from 'src/services/${names.fs}/${names.fs}.types';
|
|
223
|
+
import { ${names.capital}Service } from 'src/services/${names.fs}/${names.fs}.service';
|
|
224
|
+
import { ${names.capital}SubsetA } from 'src/services/sonamu.generated';
|
|
225
|
+
${_.uniq(columns.filter((col)=>[
|
|
226
|
+
"number-fk_id",
|
|
227
|
+
"enums"
|
|
228
|
+
].includes(col.renderType)).map((col)=>{
|
|
229
|
+
return this.renderColumnImport(entityId, col);
|
|
230
|
+
})).join("\n")}
|
|
231
|
+
|
|
232
|
+
export default function ${names.capitalPlural}FormPage() {
|
|
233
|
+
// 라우팅 searchParams
|
|
234
|
+
const [searchParams] = useSearchParams();
|
|
235
|
+
const query = {
|
|
236
|
+
id: searchParams.get('id') ?? undefined,
|
|
237
|
+
};
|
|
238
|
+
|
|
239
|
+
return <${names.capitalPlural}Form id={query?.id ? Number(query.id) : undefined} />;
|
|
240
|
+
}
|
|
241
|
+
type ${names.capitalPlural}FormProps = {
|
|
242
|
+
id?: number;
|
|
243
|
+
mode?: 'page' | 'modal';
|
|
244
|
+
};
|
|
245
|
+
export function ${names.capitalPlural}Form({ id, mode }: ${names.capitalPlural}FormProps) {
|
|
246
|
+
// 편집시 기존 row
|
|
247
|
+
const [row, setRow] = useState<${names.capital}SubsetA | undefined>();
|
|
248
|
+
|
|
249
|
+
// ${names.capital}SaveParams 폼
|
|
250
|
+
const { form, setForm, register } = useTypeForm(${names.capital}SaveParams, ${JSON.stringify(defaultValue).replace(/"now\(\)"/g, "DateTime.local().toSQL()!.slice(0, 19)")});
|
|
251
|
+
|
|
252
|
+
// 수정일 때 기존 row 콜
|
|
253
|
+
useEffect(() => {
|
|
254
|
+
if (id) {
|
|
255
|
+
${names.capital}Service.get${names.capital}('A', id).then((row) => {
|
|
256
|
+
setRow(row);
|
|
257
|
+
setForm({
|
|
258
|
+
...row,
|
|
259
|
+
${columns.filter((col)=>col.renderType === "number-fk_id").map((col)=>{
|
|
260
|
+
if (col.nullable) {
|
|
261
|
+
return `${col.name}: row.${col.name.replace("_id", "?.id")} ?? null`;
|
|
262
|
+
} else {
|
|
263
|
+
return `${col.name}: row.${col.name.replace("_id", ".id")}`;
|
|
264
|
+
}
|
|
265
|
+
}).join(",\n")}
|
|
266
|
+
});
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
}, [id]);
|
|
270
|
+
|
|
271
|
+
// CommonModal
|
|
272
|
+
// const { doneModal, closeModal } = useCommonModal();
|
|
273
|
+
|
|
274
|
+
// 저장
|
|
275
|
+
const { goBack } = useGoBack();
|
|
276
|
+
const handleSubmit = useCallback(() => {
|
|
277
|
+
${names.capital}Service.save([form]).then(([id]) => {
|
|
278
|
+
if( mode === 'modal' ) {
|
|
279
|
+
// doneModal();
|
|
280
|
+
} else {
|
|
281
|
+
goBack('/admin/${names.fsPlural}');
|
|
282
|
+
}
|
|
283
|
+
}).catch(defaultCatch);
|
|
284
|
+
}, [ form, mode, id ]);
|
|
285
|
+
|
|
286
|
+
// 페이지
|
|
287
|
+
const PAGE = {
|
|
288
|
+
title: \`${entity.title ?? names.capital}\${id ? \`#\${id} 수정\` : ' 등록'}\`,
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
return (
|
|
292
|
+
<div className="form">
|
|
293
|
+
<Segment padded basic>
|
|
294
|
+
<Segment padded color="grey">
|
|
295
|
+
<div className="header-row">
|
|
296
|
+
<Header>
|
|
297
|
+
{PAGE.title}
|
|
298
|
+
</Header>
|
|
299
|
+
{ mode !== 'modal' && <div className="buttons">
|
|
300
|
+
<BackLink primary size="tiny" to="/admin/${names.fsPlural}" content="목록" icon="list" />
|
|
301
|
+
</div>}
|
|
302
|
+
</div>
|
|
303
|
+
<Form>
|
|
304
|
+
${columns.map((col)=>{
|
|
305
|
+
if (col.name === "created_at") {
|
|
306
|
+
return `{form.id && (${this.wrapFG(`<div className="p-8px">{formatDateTime(form.${col.name})}</div>`, "등록일시")})}`;
|
|
307
|
+
} else {
|
|
308
|
+
return this.wrapFG(this.renderColumn(entityId, col, names), (()=>{
|
|
309
|
+
if (col.label.endsWith("Id")) {
|
|
310
|
+
try {
|
|
311
|
+
const entity = EntityManager.get(col.label.replace("Id", ""));
|
|
312
|
+
return entity.title ?? col.label;
|
|
313
|
+
} catch {
|
|
314
|
+
return col.label;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
return col.label;
|
|
318
|
+
})());
|
|
319
|
+
}
|
|
320
|
+
}).join("\n")}
|
|
321
|
+
<Segment basic textAlign="center">
|
|
322
|
+
<Button type="submit" primary onClick={handleSubmit} content="저장" icon="save" />
|
|
323
|
+
</Segment>
|
|
324
|
+
</Form>
|
|
325
|
+
</Segment>
|
|
326
|
+
</Segment>
|
|
327
|
+
</div>
|
|
328
|
+
);
|
|
329
|
+
};
|
|
330
|
+
`.trim(),
|
|
331
|
+
importKeys: [],
|
|
332
|
+
preTemplates
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvdmlld19mb3JtLnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHsgUmVuZGVyaW5nTm9kZSwgVGVtcGxhdGVLZXksIFRlbXBsYXRlT3B0aW9ucyB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgRW50aXR5TWFuYWdlciwgRW50aXR5TmFtZXNSZWNvcmQgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBSZW5kZXJlZFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuaW1wb3J0IHsgZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUsIGdldEVudW1JbmZvRnJvbUNvbE5hbWUgfSBmcm9tIFwiLi4vaGVscGVyc1wiO1xuaW1wb3J0ICogYXMgXyBmcm9tIFwibG9kYXNoLWVzXCI7XG5pbXBvcnQgeyBnZXRab2RUeXBlQnlJZCwgem9kVHlwZVRvUmVuZGVyaW5nTm9kZSB9IGZyb20gXCIuLi96b2QtY29udmVydGVyXCI7XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZV9fdmlld19mb3JtIGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcInZpZXdfZm9ybVwiKTtcbiAgfVxuXG4gIGdldFRhcmdldEFuZFBhdGgobmFtZXM6IEVudGl0eU5hbWVzUmVjb3JkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRhcmdldDogXCJ3ZWIvc3JjL3BhZ2VzL2FkbWluXCIsXG4gICAgICBwYXRoOiBgJHtuYW1lcy5mc1BsdXJhbH0vZm9ybS50c3hgLFxuICAgIH07XG4gIH1cblxuICB3cmFwRkMoYm9keTogc3RyaW5nLCBsYWJlbD86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGA8Rm9ybS5GaWVsZD4ke2xhYmVsID8gYFxcbiAgIDxsYWJlbD4ke2xhYmVsfTwvbGFiZWw+YCA6IFwiXCJ9YCxcbiAgICAgIGJvZHksXG4gICAgICBgPC9Gb3JtLkZpZWxkPmAsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICB9XG4gIHdyYXBGRyhib2R5OiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gW1xuICAgICAgYDxGb3JtLkdyb3VwIHdpZHRocz1cImVxdWFsXCI+YCxcbiAgICAgIHRoaXMud3JhcEZDKGJvZHksIGxhYmVsKSxcbiAgICAgIGA8L0Zvcm0uR3JvdXA+YCxcbiAgICBdLmpvaW4oXCJcXG5cIik7XG4gIH1cblxuICByZW5kZXJDb2x1bW5JbXBvcnQoZW50aXR5SWQ6IHN0cmluZywgY29sOiBSZW5kZXJpbmdOb2RlKSB7XG4gICAgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIpIHtcbiAgICAgIGNvbnN0IHsgaWQsIHRhcmdldEVudGl0eU5hbWVzIH0gPSBnZXRFbnVtSW5mb0Zyb21Db2xOYW1lKFxuICAgICAgICBlbnRpdHlJZCxcbiAgICAgICAgY29sLm5hbWVcbiAgICAgICk7XG4gICAgICBjb25zdCBjb21wb25lbnRJZCA9IGAke2lkfVNlbGVjdGA7XG4gICAgICByZXR1cm4gYGltcG9ydCB7ICR7Y29tcG9uZW50SWR9IH0gZnJvbSBcInNyYy9jb21wb25lbnRzLyR7dGFyZ2V0RW50aXR5TmFtZXMuZnN9LyR7Y29tcG9uZW50SWR9XCI7YDtcbiAgICB9IGVsc2UgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcIm51bWJlci1ma19pZFwiKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZWxQcm9wID0gZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoXG4gICAgICAgICAgZW50aXR5SWQsXG4gICAgICAgICAgY29sLm5hbWUucmVwbGFjZShcIl9pZFwiLCBcIlwiKVxuICAgICAgICApO1xuICAgICAgICBjb25zdCB0YXJnZXROYW1lcyA9IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQocmVsUHJvcC53aXRoKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50SWQgPSBgJHtyZWxQcm9wLndpdGh9SWRBc3luY1NlbGVjdGA7XG4gICAgICAgIHJldHVybiBgaW1wb3J0IHsgJHtjb21wb25lbnRJZH0gfSBmcm9tIFwic3JjL2NvbXBvbmVudHMvJHt0YXJnZXROYW1lcy5mc30vJHtjb21wb25lbnRJZH1cIjtgO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYOugjOuNlCDrtojqsIDriqXtlZwg7J6E7Y+s7Yq4ICR7Y29sLm5hbWV9ICR7Y29sLnJlbmRlclR5cGV9YCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyQ29sdW1uKFxuICAgIGVudGl0eUlkOiBzdHJpbmcsXG4gICAgY29sOiBSZW5kZXJpbmdOb2RlLFxuICAgIG5hbWVzOiBFbnRpdHlOYW1lc1JlY29yZCxcbiAgICBwYXJlbnQ6IHN0cmluZyA9IFwiXCJcbiAgKTogc3RyaW5nIHtcbiAgICBsZXQgcmVnRXhwcjogc3RyaW5nID0gXCJcIjtcbiAgICByZWdFeHByID0gYHsuLi5yZWdpc3RlcihcXGAke3BhcmVudH0ke2NvbC5uYW1lfVxcYCl9YDtcblxuICAgIHN3aXRjaCAoY29sLnJlbmRlclR5cGUpIHtcbiAgICAgIGNhc2UgXCJzdHJpbmctcGxhaW5cIjpcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RTdHJpbmcgJiZcbiAgICAgICAgICAoY29sLnpvZFR5cGUubWF4TGVuZ3RoID8/IDApIDw9IDUxMlxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gYDxJbnB1dCBwbGFjZWhvbGRlcj1cIiR7Y29sLmxhYmVsfVwiICR7cmVnRXhwcn0gLz5gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBgPFRleHRBcmVhIHJvd3M9ezh9IHBsYWNlaG9sZGVyPVwiJHtjb2wubGFiZWx9XCIgJHtyZWdFeHByfSAvPmA7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgXCJkYXRldGltZVwiOlxuICAgICAgICByZXR1cm4gYDxJbnB1dCB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIiAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgIGNhc2UgXCJzdHJpbmctZGF0ZXRpbWVcIjpcbiAgICAgICAgcmV0dXJuIGA8U1FMRGF0ZVRpbWVJbnB1dCAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgIGNhc2UgXCJzdHJpbmctZGF0ZVwiOlxuICAgICAgICByZXR1cm4gYDxTUUxEYXRlSW5wdXQgJHtyZWdFeHByfSAvPmA7XG4gICAgICBjYXNlIFwibnVtYmVyLWlkXCI6XG4gICAgICAgIHJldHVybiBgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgIGNhc2UgXCJudW1iZXItcGxhaW5cIjpcbiAgICAgICAgcmV0dXJuIGA8TnVtYmVySW5wdXQgcGxhY2Vob2xkZXI9XCIke2NvbC5sYWJlbH1cIiAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgIHJldHVybiBgPEJvb2xlYW5Ub2dnbGUgJHtyZWdFeHByfSAvPmA7XG4gICAgICBjYXNlIFwic3RyaW5nLWltYWdlXCI6XG4gICAgICAgIHJldHVybiBgPEltYWdlVXBsb2FkZXIgbXVsdGlwbGU9e2ZhbHNlfSAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgIGNhc2UgXCJhcnJheS1pbWFnZXNcIjpcbiAgICAgICAgcmV0dXJuIGA8SW1hZ2VVcGxvYWRlciBtdWx0aXBsZT17dHJ1ZX0gJHtyZWdFeHByfSBtYXhTaXplPXs1fSAvPmA7XG4gICAgICBjYXNlIFwiZW51bXNcIjpcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsZXQgZW51bUlkOiBzdHJpbmc7XG4gICAgICAgICAgaWYgKGNvbC5uYW1lID09PSBcIm9yZGVyQnlcIikge1xuICAgICAgICAgICAgZW51bUlkID0gYCR7bmFtZXMuY2FwaXRhbH0ke2luZmxlY3Rpb24uY2FtZWxpemUoY29sLm5hbWUpfVNlbGVjdGA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHsgaWQgfSA9IGdldEVudW1JbmZvRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lKTtcbiAgICAgICAgICAgIGVudW1JZCA9IGAke2lkfVNlbGVjdGA7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBgPCR7ZW51bUlkfSAke3JlZ0V4cHJ9ICR7XG4gICAgICAgICAgICBjb2wub3B0aW9uYWwgfHwgY29sLm51bGxhYmxlID8gXCJjbGVhcmFibGVcIiA6IFwiXCJcbiAgICAgICAgICB9IHRleHRQcmVmaXg9XCJcIiAvPmA7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHJldHVybiBgPD7ssL7snYQg7IiYIOyXhuuKlCBFbnVtICR7Y29sLm5hbWV9PC8+YDtcbiAgICAgICAgfVxuICAgICAgY2FzZSBcIm51bWJlci1ma19pZFwiOlxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShcbiAgICAgICAgICAgIGVudGl0eUlkLFxuICAgICAgICAgICAgY29sLm5hbWUucmVwbGFjZShcIl9pZFwiLCBcIlwiKVxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgZmtJZCA9IGAke3JlbFByb3Aud2l0aH1JZEFzeW5jU2VsZWN0YDtcbiAgICAgICAgICByZXR1cm4gYDwke2ZrSWR9IHsuLi5yZWdpc3RlcignJHtjb2wubmFtZX0nKX0gJHtcbiAgICAgICAgICAgIGNvbC5vcHRpb25hbCB8fCBjb2wubnVsbGFibGUgPyBcImNsZWFyYWJsZVwiIDogXCJcIlxuICAgICAgICAgIH0gc3Vic2V0PVwiQVwiIC8+YDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIGA8SW5wdXQgJHtyZWdFeHByfSAvPmA7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgICByZXR1cm4gYDw+JHtjb2wubmFtZX0gYXJyYXk8Lz5gO1xuICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICByZXR1cm4gYDw+JHtjb2wubmFtZX0gb2JqZWN0PC8+YDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBg64yA7J2RIOu2iOqwgOuKpe2VnCDroIzrjZQg7YOA7J6FICR7Y29sLnJlbmRlclR5cGV9IG9uICR7Y29sLm5hbWV9YFxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJlc29sdmVEZWZhdWx0VmFsdWUoY29sdW1uczogUmVuZGVyaW5nTm9kZVtdKTogb2JqZWN0IHtcbiAgICByZXR1cm4gY29sdW1ucy5yZWR1Y2UoXG4gICAgICAocmVzdWx0LCBjb2wpID0+IHtcbiAgICAgICAgaWYgKGNvbC5vcHRpb25hbCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdmFsdWU6IHVua25vd247XG4gICAgICAgIGlmIChjb2wubnVsbGFibGUgPT09IHRydWUpIHtcbiAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sLnpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE51bWJlcikge1xuICAgICAgICAgIHZhbHVlID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChjb2wuem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kRW51bSkge1xuICAgICAgICAgIHZhbHVlID0gT2JqZWN0LmtleXMoY29sLnpvZFR5cGUub3B0aW9ucylbMF07XG4gICAgICAgIH0gZWxzZSBpZiAoY29sLnpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEJvb2xlYW4pIHtcbiAgICAgICAgICB2YWx1ZSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2REYXRlKSB7XG4gICAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RTdHJpbmcpIHtcbiAgICAgICAgICBpZiAoY29sLnJlbmRlclR5cGUgPT09IFwic3RyaW5nLWRhdGV0aW1lXCIpIHtcbiAgICAgICAgICAgIHZhbHVlID0gXCJub3coKVwiO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZSA9IFwiXCI7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RBcnJheSkge1xuICAgICAgICAgIHZhbHVlID0gW107XG4gICAgICAgIH0gZWxzZSBpZiAoY29sLnpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE9iamVjdCkge1xuICAgICAgICAgIHZhbHVlID0ge307XG4gICAgICAgIH1cblxuICAgICAgICByZXN1bHRbY29sLm5hbWVdID0gdmFsdWU7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9LFxuICAgICAge30gYXMgeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH1cbiAgICApO1xuICB9XG5cbiAgYXN5bmMgcmVuZGVyKHsgZW50aXR5SWQgfTogVGVtcGxhdGVPcHRpb25zW1widmlld19mb3JtXCJdKSB7XG4gICAgY29uc3Qgc2F2ZVBhcmFtc1pvZFR5cGUgPSBhd2FpdCBnZXRab2RUeXBlQnlJZChgJHtlbnRpdHlJZH1TYXZlUGFyYW1zYCk7XG4gICAgY29uc3Qgc2F2ZVBhcmFtc05vZGUgPSB6b2RUeXBlVG9SZW5kZXJpbmdOb2RlKHNhdmVQYXJhbXNab2RUeXBlKTtcblxuICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICBjb25zdCBuYW1lcyA9IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQpO1xuICAgIGNvbnN0IGNvbHVtbnMgPSAoc2F2ZVBhcmFtc05vZGUuY2hpbGRyZW4gYXMgUmVuZGVyaW5nTm9kZVtdKVxuICAgICAgLmZpbHRlcigoY29sKSA9PiBjb2wubmFtZSAhPT0gXCJpZFwiKVxuICAgICAgLm1hcCgoY29sKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb3BDYW5kaWRhdGUgPSBlbnRpdHkucHJvcHMuZmluZChcbiAgICAgICAgICAocHJvcCkgPT4gcHJvcC5uYW1lID09PSBjb2wubmFtZVxuICAgICAgICApO1xuICAgICAgICBjb2wubGFiZWwgPSBwcm9wQ2FuZGlkYXRlPy5kZXNjID8/IGNvbC5sYWJlbDtcbiAgICAgICAgcmV0dXJuIGNvbDtcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gdGhpcy5yZXNvbHZlRGVmYXVsdFZhbHVlKGNvbHVtbnMpO1xuXG4gICAgLy8g7ZSE66asIO2FnO2UjOumv1xuICAgIGNvbnN0IHByZVRlbXBsYXRlczogUmVuZGVyZWRUZW1wbGF0ZVtcInByZVRlbXBsYXRlc1wiXSA9IChcbiAgICAgIGNvbHVtbnMgYXMgUmVuZGVyaW5nTm9kZVtdXG4gICAgKVxuICAgICAgLmZpbHRlcigoY29sKSA9PiB7XG4gICAgICAgIGlmIChjb2wubmFtZSA9PT0gXCJpZFwiKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbC5uYW1lLmVuZHNXaXRoKFwiX2lkXCIpIHx8IGNvbC5yZW5kZXJUeXBlID09PSBcIm51bWJlci1pZFwiKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZS5yZXBsYWNlKFwiX2lkXCIsIFwiXCIpKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJlbnVtc1wiKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGdldEVudW1JbmZvRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KVxuICAgICAgLm1hcCgoY29sKSA9PiB7XG4gICAgICAgIGxldCBrZXk6IFRlbXBsYXRlS2V5O1xuICAgICAgICBsZXQgdGFyZ2V0TWRJZCA9IGVudGl0eUlkO1xuICAgICAgICBsZXQgZW51bUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJlbnVtc1wiKSB7XG4gICAgICAgICAga2V5ID0gXCJ2aWV3X2VudW1zX3NlbGVjdFwiO1xuICAgICAgICAgIGNvbnN0IHsgdGFyZ2V0RW50aXR5TmFtZXM6IHRhcmdldE1ETmFtZXMsIGlkIH0gPVxuICAgICAgICAgICAgZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgICAgIHRhcmdldE1kSWQgPSB0YXJnZXRNRE5hbWVzLmNhcGl0YWw7XG4gICAgICAgICAgZW51bUlkID0gaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAga2V5ID0gXCJ2aWV3X2lkX2FzeW5jX3NlbGVjdFwiO1xuICAgICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShcbiAgICAgICAgICAgIGVudGl0eUlkLFxuICAgICAgICAgICAgY29sLm5hbWUucmVwbGFjZShcIl9pZFwiLCBcIlwiKVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGFyZ2V0TWRJZCA9IHJlbFByb3Aud2l0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAga2V5OiBrZXkgYXMgVGVtcGxhdGVLZXksXG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgZW50aXR5SWQ6IHRhcmdldE1kSWQsXG4gICAgICAgICAgICBub2RlOiBjb2wsXG4gICAgICAgICAgICBlbnVtSWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChwcmVUZW1wbGF0ZSkgPT4ge1xuICAgICAgICBpZiAocHJlVGVtcGxhdGUua2V5ID09PSBcInZpZXdfaWRfYXN5bmNfc2VsZWN0XCIpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgRW50aXR5TWFuYWdlci5nZXQocHJlVGVtcGxhdGUub3B0aW9ucy5lbnRpdHlJZCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgobmFtZXMpLFxuICAgICAgYm9keTogYFxuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUsIERpc3BhdGNoLCBTZXRTdGF0ZUFjdGlvbiwgZm9yd2FyZFJlZiwgUmVmLCB1c2VJbXBlcmF0aXZlSGFuZGxlLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVNlYXJjaFBhcmFtcyB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuaW1wb3J0IHtcbiAgQnV0dG9uLFxuICBDaGVja2JveCxcbiAgRm9ybSxcbiAgSGVhZGVyLFxuICBJbnB1dCxcbiAgU2VnbWVudCxcbiAgVGV4dEFyZWEsXG4gIExhYmVsLFxufSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gXCJsdXhvblwiO1xuXG5pbXBvcnQgeyBCYWNrTGluaywgTGlua0lucHV0LCBOdW1iZXJJbnB1dCwgQm9vbGVhblRvZ2dsZSwgU1FMRGF0ZVRpbWVJbnB1dCwgU1FMRGF0ZUlucHV0LCB1c2VUeXBlRm9ybSwgdXNlR29CYWNrLCBmb3JtYXREYXRlVGltZSB9IGZyb20gXCJAc29uYW11LWtpdC9yZWFjdC1zdWlcIjtcbmltcG9ydCB7IGRlZmF1bHRDYXRjaCB9IGZyb20gJ3NyYy9zZXJ2aWNlcy9zb25hbXUuc2hhcmVkJztcbi8vIGltcG9ydCB7IEltYWdlVXBsb2FkZXIgfSBmcm9tICdzcmMvYWRtaW4tY29tbW9uL0ltYWdlVXBsb2FkZXInO1xuLy8gaW1wb3J0IHsgdXNlQ29tbW9uTW9kYWwgfSBmcm9tIFwic3JjL2FkbWluLWNvbW1vbi9Db21tb25Nb2RhbFwiO1xuXG5pbXBvcnQgeyAke25hbWVzLmNhcGl0YWx9U2F2ZVBhcmFtcyB9IGZyb20gJ3NyYy9zZXJ2aWNlcy8ke25hbWVzLmZzfS8ke1xuICAgICAgICBuYW1lcy5mc1xuICAgICAgfS50eXBlcyc7XG5pbXBvcnQgeyAke25hbWVzLmNhcGl0YWx9U2VydmljZSB9IGZyb20gJ3NyYy9zZXJ2aWNlcy8ke25hbWVzLmZzfS8ke1xuICAgICAgICBuYW1lcy5mc1xuICAgICAgfS5zZXJ2aWNlJztcbmltcG9ydCB7ICR7bmFtZXMuY2FwaXRhbH1TdWJzZXRBIH0gZnJvbSAnc3JjL3NlcnZpY2VzL3NvbmFtdS5nZW5lcmF0ZWQnO1xuJHtfLnVuaXEoXG4gIGNvbHVtbnNcbiAgICAuZmlsdGVyKChjb2wpID0+IFtcIm51bWJlci1ma19pZFwiLCBcImVudW1zXCJdLmluY2x1ZGVzKGNvbC5yZW5kZXJUeXBlKSlcbiAgICAubWFwKChjb2wpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlckNvbHVtbkltcG9ydChlbnRpdHlJZCwgY29sKTtcbiAgICB9KVxuKS5qb2luKFwiXFxuXCIpfVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAke25hbWVzLmNhcGl0YWxQbHVyYWx9Rm9ybVBhZ2UoKSB7XG4gIC8vIOudvOyasO2MhSBzZWFyY2hQYXJhbXNcbiAgY29uc3QgW3NlYXJjaFBhcmFtc10gPSB1c2VTZWFyY2hQYXJhbXMoKTtcbiAgY29uc3QgcXVlcnkgPSB7XG4gICAgaWQ6IHNlYXJjaFBhcmFtcy5nZXQoJ2lkJykgPz8gdW5kZWZpbmVkLFxuICB9O1xuXG4gIHJldHVybiA8JHtcbiAgICBuYW1lcy5jYXBpdGFsUGx1cmFsXG4gIH1Gb3JtIGlkPXtxdWVyeT8uaWQgPyBOdW1iZXIocXVlcnkuaWQpIDogdW5kZWZpbmVkfSAvPjtcbn1cbnR5cGUgJHtuYW1lcy5jYXBpdGFsUGx1cmFsfUZvcm1Qcm9wcyA9IHtcbiAgaWQ/OiBudW1iZXI7XG4gIG1vZGU/OiAncGFnZScgfCAnbW9kYWwnO1xufTtcbmV4cG9ydCBmdW5jdGlvbiAke25hbWVzLmNhcGl0YWxQbHVyYWx9Rm9ybSh7IGlkLCBtb2RlIH06ICR7XG4gICAgICAgIG5hbWVzLmNhcGl0YWxQbHVyYWxcbiAgICAgIH1Gb3JtUHJvcHMpIHtcbiAgLy8g7Y647KeR7IucIOq4sOyhtCByb3dcbiAgY29uc3QgW3Jvdywgc2V0Um93XSA9IHVzZVN0YXRlPCR7bmFtZXMuY2FwaXRhbH1TdWJzZXRBIHwgdW5kZWZpbmVkPigpO1xuXG4gIC8vICR7bmFtZXMuY2FwaXRhbH1TYXZlUGFyYW1zIO2PvFxuICBjb25zdCB7IGZvcm0sIHNldEZvcm0sIHJlZ2lzdGVyIH0gPSB1c2VUeXBlRm9ybSgke1xuICAgIG5hbWVzLmNhcGl0YWxcbiAgfVNhdmVQYXJhbXMsICR7SlNPTi5zdHJpbmdpZnkoZGVmYXVsdFZhbHVlKS5yZXBsYWNlKFxuICAgIC9cIm5vd1xcKFxcKVwiL2csXG4gICAgXCJEYXRlVGltZS5sb2NhbCgpLnRvU1FMKCkhLnNsaWNlKDAsIDE5KVwiXG4gICl9KTtcblxuICAvLyDsiJjsoJXsnbwg65WMIOq4sOyhtCByb3cg7L2cXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlkKSB7XG4gICAgICAke25hbWVzLmNhcGl0YWx9U2VydmljZS5nZXQke25hbWVzLmNhcGl0YWx9KCdBJywgaWQpLnRoZW4oKHJvdykgPT4ge1xuICAgICAgICBzZXRSb3cocm93KTtcbiAgICAgICAgc2V0Rm9ybSh7XG4gICAgICAgICAgLi4ucm93LFxuICAgICAgICAgICR7Y29sdW1uc1xuICAgICAgICAgICAgLmZpbHRlcigoY29sKSA9PiBjb2wucmVuZGVyVHlwZSA9PT0gXCJudW1iZXItZmtfaWRcIilcbiAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoY29sLm51bGxhYmxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2NvbC5uYW1lfTogcm93LiR7Y29sLm5hbWUucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgIFwiX2lkXCIsXG4gICAgICAgICAgICAgICAgICBcIj8uaWRcIlxuICAgICAgICAgICAgICAgICl9ID8/IG51bGxgO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBgJHtjb2wubmFtZX06IHJvdy4ke2NvbC5uYW1lLnJlcGxhY2UoXCJfaWRcIiwgXCIuaWRcIil9YDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKFwiLFxcblwiKX1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtpZF0pO1xuXG4gIC8vIENvbW1vbk1vZGFsXG4gIC8vIGNvbnN0IHsgZG9uZU1vZGFsLCBjbG9zZU1vZGFsIH0gPSB1c2VDb21tb25Nb2RhbCgpO1xuXG4gIC8vIOyggOyepVxuICBjb25zdCB7IGdvQmFjayB9ID0gdXNlR29CYWNrKCk7XG4gIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAke25hbWVzLmNhcGl0YWx9U2VydmljZS5zYXZlKFtmb3JtXSkudGhlbigoW2lkXSkgPT4ge1xuICAgICAgaWYoIG1vZGUgPT09ICdtb2RhbCcgKSB7XG4gICAgICAgIC8vIGRvbmVNb2RhbCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ29CYWNrKCcvYWRtaW4vJHtuYW1lcy5mc1BsdXJhbH0nKTtcbiAgICAgIH1cbiAgICB9KS5jYXRjaChkZWZhdWx0Q2F0Y2gpO1xuICB9LCBbIGZvcm0sIG1vZGUsIGlkIF0pO1xuXG4gIC8vIO2OmOydtOyngFxuICBjb25zdCBQQUdFID0ge1xuICAgIHRpdGxlOiBcXGAke1xuICAgICAgZW50aXR5LnRpdGxlID8/IG5hbWVzLmNhcGl0YWxcbiAgICB9XFwke2lkID8gXFxgI1xcJHtpZH0g7IiY7KCVXFxgIDogJyDrk7HroZ0nfVxcYCxcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtXCI+XG4gICAgICA8U2VnbWVudCBwYWRkZWQgYmFzaWM+XG4gICAgICAgIDxTZWdtZW50IHBhZGRlZCBjb2xvcj1cImdyZXlcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImhlYWRlci1yb3dcIj5cbiAgICAgICAgICAgIDxIZWFkZXI+XG4gICAgICAgICAgICAgIHtQQUdFLnRpdGxlfVxuICAgICAgICAgICAgPC9IZWFkZXI+XG4gICAgICAgICAgICB7IG1vZGUgIT09ICdtb2RhbCcgJiYgPGRpdiBjbGFzc05hbWU9XCJidXR0b25zXCI+XG4gICAgICAgICAgICAgIDxCYWNrTGluayBwcmltYXJ5IHNpemU9XCJ0aW55XCIgdG89XCIvYWRtaW4vJHtcbiAgICAgICAgICAgICAgICBuYW1lcy5mc1BsdXJhbFxuICAgICAgICAgICAgICB9XCIgY29udGVudD1cIuuqqeuhnVwiIGljb249XCJsaXN0XCIgLz5cbiAgICAgICAgICAgIDwvZGl2Pn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8Rm9ybT5cbiAgICAgICAgICAgICR7Y29sdW1uc1xuICAgICAgICAgICAgICAubWFwKChjb2wpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY29sLm5hbWUgPT09IFwiY3JlYXRlZF9hdFwiKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gYHtmb3JtLmlkICYmICgke3RoaXMud3JhcEZHKFxuICAgICAgICAgICAgICAgICAgICBgPGRpdiBjbGFzc05hbWU9XCJwLThweFwiPntmb3JtYXREYXRlVGltZShmb3JtLiR7Y29sLm5hbWV9KX08L2Rpdj5gLFxuICAgICAgICAgICAgICAgICAgICBcIuuTseuhneydvOyLnFwiXG4gICAgICAgICAgICAgICAgICApfSl9YDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMud3JhcEZHKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckNvbHVtbihlbnRpdHlJZCwgY29sLCBuYW1lcyksXG4gICAgICAgICAgICAgICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbC5sYWJlbC5lbmRzV2l0aChcIklkXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2wubGFiZWwucmVwbGFjZShcIklkXCIsIFwiXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbnRpdHkudGl0bGUgPz8gY29sLmxhYmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2wubGFiZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2wubGFiZWw7XG4gICAgICAgICAgICAgICAgICAgIH0pKClcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuam9pbihcIlxcblwiKX1cbiAgICAgICAgICAgIDxTZWdtZW50IGJhc2ljIHRleHRBbGlnbj1cImNlbnRlclwiPlxuICAgICAgICAgICAgICA8QnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBwcmltYXJ5IG9uQ2xpY2s9e2hhbmRsZVN1Ym1pdH0gY29udGVudD1cIuyggOyepVwiIGljb249XCJzYXZlXCIgLz5cbiAgICAgICAgICAgIDwvU2VnbWVudD5cbiAgICAgICAgICA8L0Zvcm0+XG4gICAgICAgIDwvU2VnbWVudD5cbiAgICAgIDwvU2VnbWVudD5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4gICAgICBgLnRyaW0oKSxcbiAgICAgIGltcG9ydEtleXM6IFtdLFxuICAgICAgcHJlVGVtcGxhdGVzLFxuICAgIH07XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJpbmZsZWN0aW9uIiwieiIsIkVudGl0eU1hbmFnZXIiLCJUZW1wbGF0ZSIsImdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lIiwiZ2V0RW51bUluZm9Gcm9tQ29sTmFtZSIsIl8iLCJnZXRab2RUeXBlQnlJZCIsInpvZFR5cGVUb1JlbmRlcmluZ05vZGUiLCJUZW1wbGF0ZV9fdmlld19mb3JtIiwiZ2V0VGFyZ2V0QW5kUGF0aCIsIm5hbWVzIiwidGFyZ2V0IiwicGF0aCIsImZzUGx1cmFsIiwid3JhcEZDIiwiYm9keSIsImxhYmVsIiwiam9pbiIsIndyYXBGRyIsInJlbmRlckNvbHVtbkltcG9ydCIsImVudGl0eUlkIiwiY29sIiwicmVuZGVyVHlwZSIsImlkIiwidGFyZ2V0RW50aXR5TmFtZXMiLCJuYW1lIiwiY29tcG9uZW50SWQiLCJmcyIsInJlbFByb3AiLCJyZXBsYWNlIiwidGFyZ2V0TmFtZXMiLCJnZXROYW1lc0Zyb21JZCIsIndpdGgiLCJFcnJvciIsInJlbmRlckNvbHVtbiIsInBhcmVudCIsInJlZ0V4cHIiLCJ6b2RUeXBlIiwiWm9kU3RyaW5nIiwibWF4TGVuZ3RoIiwiZW51bUlkIiwiY2FwaXRhbCIsImNhbWVsaXplIiwib3B0aW9uYWwiLCJudWxsYWJsZSIsImZrSWQiLCJyZXNvbHZlRGVmYXVsdFZhbHVlIiwiY29sdW1ucyIsInJlZHVjZSIsInJlc3VsdCIsInZhbHVlIiwiWm9kTnVtYmVyIiwiWm9kRW51bSIsIk9iamVjdCIsImtleXMiLCJvcHRpb25zIiwiWm9kQm9vbGVhbiIsIlpvZERhdGUiLCJEYXRlIiwiWm9kQXJyYXkiLCJab2RPYmplY3QiLCJyZW5kZXIiLCJzYXZlUGFyYW1zWm9kVHlwZSIsInNhdmVQYXJhbXNOb2RlIiwiZW50aXR5IiwiZ2V0IiwiY2hpbGRyZW4iLCJmaWx0ZXIiLCJtYXAiLCJwcm9wQ2FuZGlkYXRlIiwicHJvcHMiLCJmaW5kIiwicHJvcCIsImRlc2MiLCJkZWZhdWx0VmFsdWUiLCJwcmVUZW1wbGF0ZXMiLCJlbmRzV2l0aCIsImtleSIsInRhcmdldE1kSWQiLCJ0YXJnZXRNRE5hbWVzIiwibm9kZSIsInByZVRlbXBsYXRlIiwidW5pcSIsImluY2x1ZGVzIiwiY2FwaXRhbFBsdXJhbCIsIkpTT04iLCJzdHJpbmdpZnkiLCJ0aXRsZSIsInRyaW0iLCJpbXBvcnRLZXlzIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxnQkFBZ0IsYUFBYTtBQUNwQyxTQUFTQyxDQUFDLFFBQVEsTUFBTTtBQUV4QixTQUFTQyxhQUFhLFFBQTJCLGlDQUE4QjtBQUUvRSxTQUFTQyxRQUFRLFFBQVEsaUJBQWM7QUFDdkMsU0FBU0MsMEJBQTBCLEVBQUVDLHNCQUFzQixRQUFRLGdCQUFhO0FBQ2hGLFlBQVlDLE9BQU8sWUFBWTtBQUMvQixTQUFTQyxjQUFjLEVBQUVDLHNCQUFzQixRQUFRLHNCQUFtQjtBQUUxRSxPQUFPLE1BQU1DLDRCQUE0Qk47SUFDdkMsYUFBYztRQUNaLEtBQUssQ0FBQztJQUNSO0lBRUFPLGlCQUFpQkMsS0FBd0IsRUFBRTtRQUN6QyxP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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { TemplateOptions } from "
|
|
2
|
-
import { EntityNamesRecord } from "
|
|
3
|
-
import { Template } from "
|
|
1
|
+
import { TemplateOptions } from "../../types/types";
|
|
2
|
+
import { EntityNamesRecord } from "../../entity/entity-manager";
|
|
3
|
+
import { Template } from "../template";
|
|
4
4
|
export declare class Template__view_id_all_select extends Template {
|
|
5
5
|
constructor();
|
|
6
6
|
getTargetAndPath(names: EntityNamesRecord): {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view_id_all_select.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/view_id_all_select.template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAiB,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,qBAAa,4BAA6B,SAAQ,QAAQ;;IAKxD,gBAAgB,CAAC,KAAK,EAAE,iBAAiB;;;;IAOzC,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,eAAe,CAAC,oBAAoB,CAAC;;;;;;CAiB3D"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { EntityManager } from "../../entity/entity-manager.js";
|
|
2
|
+
import { Template } from "../template.js";
|
|
3
|
+
export class Template__view_id_all_select extends Template {
|
|
4
|
+
constructor(){
|
|
5
|
+
super("view_id_all_select");
|
|
6
|
+
}
|
|
7
|
+
getTargetAndPath(names) {
|
|
8
|
+
return {
|
|
9
|
+
target: "web/src/components",
|
|
10
|
+
path: `${names.fs}/${names.capital}IdAllSelect.tsx`
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
render({ entityId }) {
|
|
14
|
+
const names = EntityManager.getNamesFromId(entityId);
|
|
15
|
+
return {
|
|
16
|
+
...this.getTargetAndPath(names),
|
|
17
|
+
body: `
|
|
18
|
+
/*
|
|
19
|
+
view_id_all_select
|
|
20
|
+
${JSON.stringify({
|
|
21
|
+
key: this.key,
|
|
22
|
+
options: entityId
|
|
23
|
+
})}
|
|
24
|
+
*/
|
|
25
|
+
`.trim(),
|
|
26
|
+
importKeys: []
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvdmlld19pZF9hbGxfc2VsZWN0LnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlbXBsYXRlT3B0aW9ucyB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgRW50aXR5TWFuYWdlciwgRW50aXR5TmFtZXNSZWNvcmQgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX3ZpZXdfaWRfYWxsX3NlbGVjdCBleHRlbmRzIFRlbXBsYXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJ2aWV3X2lkX2FsbF9zZWxlY3RcIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKG5hbWVzOiBFbnRpdHlOYW1lc1JlY29yZCkge1xuICAgIHJldHVybiB7XG4gICAgICB0YXJnZXQ6IFwid2ViL3NyYy9jb21wb25lbnRzXCIsXG4gICAgICBwYXRoOiBgJHtuYW1lcy5mc30vJHtuYW1lcy5jYXBpdGFsfUlkQWxsU2VsZWN0LnRzeGAsXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcih7IGVudGl0eUlkIH06IFRlbXBsYXRlT3B0aW9uc1tcInZpZXdfaWRfYWxsX3NlbGVjdFwiXSkge1xuICAgIGNvbnN0IG5hbWVzID0gRW50aXR5TWFuYWdlci5nZXROYW1lc0Zyb21JZChlbnRpdHlJZCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5nZXRUYXJnZXRBbmRQYXRoKG5hbWVzKSxcbiAgICAgIGJvZHk6IGBcbi8qXG52aWV3X2lkX2FsbF9zZWxlY3RcbiR7SlNPTi5zdHJpbmdpZnkoe1xuICBrZXk6IHRoaXMua2V5LFxuICBvcHRpb25zOiBlbnRpdHlJZCxcbn0pfVxuKi9cbiAgICAgIGAudHJpbSgpLFxuICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgfTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIkVudGl0eU1hbmFnZXIiLCJUZW1wbGF0ZSIsIlRlbXBsYXRlX192aWV3X2lkX2FsbF9zZWxlY3QiLCJnZXRUYXJnZXRBbmRQYXRoIiwibmFtZXMiLCJ0YXJnZXQiLCJwYXRoIiwiZnMiLCJjYXBpdGFsIiwicmVuZGVyIiwiZW50aXR5SWQiLCJnZXROYW1lc0Zyb21JZCIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5Iiwia2V5Iiwib3B0aW9ucyIsInRyaW0iLCJpbXBvcnRLZXlzIl0sIm1hcHBpbmdzIjoiQUFDQSxTQUFTQSxhQUFhLFFBQTJCLGlDQUE4QjtBQUMvRSxTQUFTQyxRQUFRLFFBQVEsaUJBQWM7QUFFdkMsT0FBTyxNQUFNQyxxQ0FBcUNEO0lBQ2hELGFBQWM7UUFDWixLQUFLLENBQUM7SUFDUjtJQUVBRSxpQkFBaUJDLEtBQXdCLEVBQUU7UUFDekMsT0FBTztZQUNMQyxRQUFRO1lBQ1JDLE1BQU0sR0FBR0YsTUFBTUcsRUFBRSxDQUFDLENBQUMsRUFBRUgsTUFBTUksT0FBTyxDQUFDLGVBQWUsQ0FBQztRQUNyRDtJQUNGO0lBRUFDLE9BQU8sRUFBRUMsUUFBUSxFQUF5QyxFQUFFO1FBQzFELE1BQU1OLFFBQVFKLGNBQWNXLGNBQWMsQ0FBQ0Q7UUFFM0MsT0FBTztZQUNMLEdBQUcsSUFBSSxDQUFDUCxnQkFBZ0IsQ0FBQ0MsTUFBTTtZQUMvQlEsTUFBTSxDQUFDOzs7QUFHYixFQUFFQyxLQUFLQyxTQUFTLENBQUM7Z0JBQ2ZDLEtBQUssSUFBSSxDQUFDQSxHQUFHO2dCQUNiQyxTQUFTTjtZQUNYLEdBQUc7O01BRUcsQ0FBQyxDQUFDTyxJQUFJO1lBQ05DLFlBQVksRUFBRTtRQUNoQjtJQUNGO0FBQ0YifQ==
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { TemplateOptions } from "
|
|
2
|
-
import { EntityNamesRecord } from "
|
|
3
|
-
import { Template } from "
|
|
1
|
+
import { TemplateOptions } from "../../types/types";
|
|
2
|
+
import { EntityNamesRecord } from "../../entity/entity-manager";
|
|
3
|
+
import { Template } from "../template";
|
|
4
4
|
export declare class Template__view_id_async_select extends Template {
|
|
5
5
|
constructor();
|
|
6
6
|
getTargetAndPath(names: EntityNamesRecord): {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view_id_async_select.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/view_id_async_select.template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAiB,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,qBAAa,8BAA+B,SAAQ,QAAQ;;IAK1D,gBAAgB,CAAC,KAAK,EAAE,iBAAiB;;;;IAOzC,MAAM,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,eAAe,CAAC,sBAAsB,CAAC;;;;;;CAyGxE"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { EntityManager } from "../../entity/entity-manager.js";
|
|
2
|
+
import { Template } from "../template.js";
|
|
3
|
+
export class Template__view_id_async_select extends Template {
|
|
4
|
+
constructor(){
|
|
5
|
+
super("view_id_async_select");
|
|
6
|
+
}
|
|
7
|
+
getTargetAndPath(names) {
|
|
8
|
+
return {
|
|
9
|
+
target: "web/src/components",
|
|
10
|
+
path: `${names.fs}/${names.capital}IdAsyncSelect.tsx`
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
render({ entityId, textField }) {
|
|
14
|
+
const names = EntityManager.getNamesFromId(entityId);
|
|
15
|
+
const entity = EntityManager.get(entityId);
|
|
16
|
+
if (!textField) {
|
|
17
|
+
const pickedProp = entity.props.find((prop)=>[
|
|
18
|
+
"name",
|
|
19
|
+
"title"
|
|
20
|
+
].includes(prop.name));
|
|
21
|
+
if (pickedProp) {
|
|
22
|
+
textField = pickedProp.name;
|
|
23
|
+
} else {
|
|
24
|
+
const candidateProp = entity.props.find((prop)=>prop.type === "string");
|
|
25
|
+
if (candidateProp) {
|
|
26
|
+
textField = candidateProp.name;
|
|
27
|
+
} else {
|
|
28
|
+
console.log("textField 찾을 수 없음");
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
...this.getTargetAndPath(names),
|
|
34
|
+
body: `
|
|
35
|
+
import React, { useState, useEffect, SyntheticEvent } from "react";
|
|
36
|
+
import { DropdownProps, DropdownItemProps, DropdownOnSearchChangeData, Dropdown } from "semantic-ui-react";
|
|
37
|
+
import { ${names.capital}SubsetKey, ${names.capital}SubsetMapping } from "src/services/sonamu.generated";
|
|
38
|
+
import { ${names.capital}Service } from "src/services/${names.fs}/${names.fs}.service";
|
|
39
|
+
import { ${names.capital}ListParams } from "src/services/${names.fs}/${names.fs}.types";
|
|
40
|
+
|
|
41
|
+
export function ${names.capital}IdAsyncSelect<T extends ${names.capital}SubsetKey>(
|
|
42
|
+
{ subset, baseListParams, textField, valueField, ...props }: DropdownProps & {
|
|
43
|
+
subset: T;
|
|
44
|
+
baseListParams?: ${names.capital}ListParams;
|
|
45
|
+
textField${textField ? "?" : ""}: keyof ${names.capital}SubsetMapping[T];
|
|
46
|
+
valueField?: keyof ${names.capital}SubsetMapping[T];
|
|
47
|
+
},
|
|
48
|
+
) {
|
|
49
|
+
const [options, setOptions] = useState<DropdownItemProps[]>([]);
|
|
50
|
+
const [listParams, setListParams] = useState<${names.capital}ListParams>(
|
|
51
|
+
baseListParams ?? {},
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
const { data, error } = ${names.capital}Service.use${names.capitalPlural}(subset, listParams);
|
|
55
|
+
const { rows: ${names.camelPlural}, total } = data ?? {};
|
|
56
|
+
|
|
57
|
+
useEffect(() => {
|
|
58
|
+
setOptions(
|
|
59
|
+
(${names.camelPlural} ?? []).map((${names.camel}) => {
|
|
60
|
+
return {
|
|
61
|
+
key: ${names.camel}.id,
|
|
62
|
+
value: ${names.camel}[valueField ?? 'id'] as string | number,
|
|
63
|
+
text: String(${names.camel}[textField${textField ? ` ?? '${textField}'` : ""}]),
|
|
64
|
+
};
|
|
65
|
+
}),
|
|
66
|
+
);
|
|
67
|
+
}, [${names.camelPlural}]);
|
|
68
|
+
|
|
69
|
+
useEffect(() => {
|
|
70
|
+
setListParams({
|
|
71
|
+
...listParams,
|
|
72
|
+
...baseListParams,
|
|
73
|
+
});
|
|
74
|
+
}, [baseListParams]);
|
|
75
|
+
|
|
76
|
+
const handleSearchChange = (
|
|
77
|
+
e: SyntheticEvent<HTMLElement, Event>,
|
|
78
|
+
data: DropdownOnSearchChangeData,
|
|
79
|
+
) => {
|
|
80
|
+
setListParams({
|
|
81
|
+
...listParams,
|
|
82
|
+
keyword: data.searchQuery,
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
return (
|
|
87
|
+
<Dropdown
|
|
88
|
+
placeholder="${entity.title ?? names.constant}"
|
|
89
|
+
selection
|
|
90
|
+
options={options}
|
|
91
|
+
onSearchChange={handleSearchChange}
|
|
92
|
+
disabled={!${names.camelPlural}}
|
|
93
|
+
loading={!${names.camelPlural}}
|
|
94
|
+
selectOnBlur={false}
|
|
95
|
+
{...props}
|
|
96
|
+
/>
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
`.trim(),
|
|
100
|
+
importKeys: []
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvdmlld19pZF9hc3luY19zZWxlY3QudGVtcGxhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVtcGxhdGVPcHRpb25zIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyLCBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi8uLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZV9fdmlld19pZF9hc3luY19zZWxlY3QgZXh0ZW5kcyBUZW1wbGF0ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwidmlld19pZF9hc3luY19zZWxlY3RcIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKG5hbWVzOiBFbnRpdHlOYW1lc1JlY29yZCkge1xuICAgIHJldHVybiB7XG4gICAgICB0YXJnZXQ6IFwid2ViL3NyYy9jb21wb25lbnRzXCIsXG4gICAgICBwYXRoOiBgJHtuYW1lcy5mc30vJHtuYW1lcy5jYXBpdGFsfUlkQXN5bmNTZWxlY3QudHN4YCxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKHsgZW50aXR5SWQsIHRleHRGaWVsZCB9OiBUZW1wbGF0ZU9wdGlvbnNbXCJ2aWV3X2lkX2FzeW5jX3NlbGVjdFwiXSkge1xuICAgIGNvbnN0IG5hbWVzID0gRW50aXR5TWFuYWdlci5nZXROYW1lc0Zyb21JZChlbnRpdHlJZCk7XG5cbiAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgaWYgKCF0ZXh0RmllbGQpIHtcbiAgICAgIGNvbnN0IHBpY2tlZFByb3AgPSBlbnRpdHkucHJvcHMuZmluZCgocHJvcCkgPT5cbiAgICAgICAgW1wibmFtZVwiLCBcInRpdGxlXCJdLmluY2x1ZGVzKHByb3AubmFtZSlcbiAgICAgICk7XG4gICAgICBpZiAocGlja2VkUHJvcCkge1xuICAgICAgICB0ZXh0RmllbGQgPSBwaWNrZWRQcm9wLm5hbWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjYW5kaWRhdGVQcm9wID0gZW50aXR5LnByb3BzLmZpbmQoXG4gICAgICAgICAgKHByb3ApID0+IHByb3AudHlwZSA9PT0gXCJzdHJpbmdcIlxuICAgICAgICApO1xuICAgICAgICBpZiAoY2FuZGlkYXRlUHJvcCkge1xuICAgICAgICAgIHRleHRGaWVsZCA9IGNhbmRpZGF0ZVByb3AubmFtZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcInRleHRGaWVsZCDssL7snYQg7IiYIOyXhuydjFwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgobmFtZXMpLFxuICAgICAgYm9keTogYFxuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIFN5bnRoZXRpY0V2ZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBEcm9wZG93blByb3BzLCBEcm9wZG93bkl0ZW1Qcm9wcywgRHJvcGRvd25PblNlYXJjaENoYW5nZURhdGEsIERyb3Bkb3duIH0gZnJvbSBcInNlbWFudGljLXVpLXJlYWN0XCI7XG5pbXBvcnQgeyAke25hbWVzLmNhcGl0YWx9U3Vic2V0S2V5LCAke1xuICAgICAgICBuYW1lcy5jYXBpdGFsXG4gICAgICB9U3Vic2V0TWFwcGluZyB9IGZyb20gXCJzcmMvc2VydmljZXMvc29uYW11LmdlbmVyYXRlZFwiO1xuaW1wb3J0IHsgJHtuYW1lcy5jYXBpdGFsfVNlcnZpY2UgfSBmcm9tIFwic3JjL3NlcnZpY2VzLyR7bmFtZXMuZnN9LyR7XG4gICAgICAgIG5hbWVzLmZzXG4gICAgICB9LnNlcnZpY2VcIjtcbmltcG9ydCB7ICR7bmFtZXMuY2FwaXRhbH1MaXN0UGFyYW1zIH0gZnJvbSBcInNyYy9zZXJ2aWNlcy8ke25hbWVzLmZzfS8ke1xuICAgICAgICBuYW1lcy5mc1xuICAgICAgfS50eXBlc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gJHtuYW1lcy5jYXBpdGFsfUlkQXN5bmNTZWxlY3Q8VCBleHRlbmRzICR7XG4gICAgICAgIG5hbWVzLmNhcGl0YWxcbiAgICAgIH1TdWJzZXRLZXk+KFxuICB7IHN1YnNldCwgYmFzZUxpc3RQYXJhbXMsIHRleHRGaWVsZCwgdmFsdWVGaWVsZCwgLi4ucHJvcHMgfTogRHJvcGRvd25Qcm9wcyAmIHtcbiAgICBzdWJzZXQ6IFQ7XG4gICAgYmFzZUxpc3RQYXJhbXM/OiAke25hbWVzLmNhcGl0YWx9TGlzdFBhcmFtcztcbiAgICB0ZXh0RmllbGQke3RleHRGaWVsZCA/IFwiP1wiIDogXCJcIn06IGtleW9mICR7bmFtZXMuY2FwaXRhbH1TdWJzZXRNYXBwaW5nW1RdO1xuICAgIHZhbHVlRmllbGQ/OiBrZXlvZiAke25hbWVzLmNhcGl0YWx9U3Vic2V0TWFwcGluZ1tUXTtcbiAgfSxcbikge1xuICBjb25zdCBbb3B0aW9ucywgc2V0T3B0aW9uc10gPSB1c2VTdGF0ZTxEcm9wZG93bkl0ZW1Qcm9wc1tdPihbXSk7XG4gIGNvbnN0IFtsaXN0UGFyYW1zLCBzZXRMaXN0UGFyYW1zXSA9IHVzZVN0YXRlPCR7bmFtZXMuY2FwaXRhbH1MaXN0UGFyYW1zPihcbiAgICBiYXNlTGlzdFBhcmFtcyA/PyB7fSxcbiAgKTtcblxuICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSAke25hbWVzLmNhcGl0YWx9U2VydmljZS51c2Uke1xuICAgIG5hbWVzLmNhcGl0YWxQbHVyYWxcbiAgfShzdWJzZXQsIGxpc3RQYXJhbXMpO1xuICBjb25zdCB7IHJvd3M6ICR7bmFtZXMuY2FtZWxQbHVyYWx9LCB0b3RhbCB9ID0gZGF0YSA/PyB7fTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldE9wdGlvbnMoXG4gICAgICAoJHtuYW1lcy5jYW1lbFBsdXJhbH0gPz8gW10pLm1hcCgoJHtuYW1lcy5jYW1lbH0pID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBrZXk6ICR7bmFtZXMuY2FtZWx9LmlkLFxuICAgICAgICAgIHZhbHVlOiAke25hbWVzLmNhbWVsfVt2YWx1ZUZpZWxkID8/ICdpZCddIGFzIHN0cmluZyB8IG51bWJlcixcbiAgICAgICAgICB0ZXh0OiBTdHJpbmcoJHtuYW1lcy5jYW1lbH1bdGV4dEZpZWxkJHtcbiAgICAgICAgICAgIHRleHRGaWVsZCA/IGAgPz8gJyR7dGV4dEZpZWxkfSdgIDogXCJcIlxuICAgICAgICAgIH1dKSxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH0sIFske25hbWVzLmNhbWVsUGx1cmFsfV0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0TGlzdFBhcmFtcyh7XG4gICAgICAuLi5saXN0UGFyYW1zLFxuICAgICAgLi4uYmFzZUxpc3RQYXJhbXMsXG4gICAgfSk7XG4gIH0sIFtiYXNlTGlzdFBhcmFtc10pO1xuXG4gIGNvbnN0IGhhbmRsZVNlYXJjaENoYW5nZSA9IChcbiAgICBlOiBTeW50aGV0aWNFdmVudDxIVE1MRWxlbWVudCwgRXZlbnQ+LFxuICAgIGRhdGE6IERyb3Bkb3duT25TZWFyY2hDaGFuZ2VEYXRhLFxuICApID0+IHtcbiAgICBzZXRMaXN0UGFyYW1zKHtcbiAgICAgIC4uLmxpc3RQYXJhbXMsXG4gICAgICBrZXl3b3JkOiBkYXRhLnNlYXJjaFF1ZXJ5LFxuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPERyb3Bkb3duXG4gICAgICBwbGFjZWhvbGRlcj1cIiR7ZW50aXR5LnRpdGxlID8/IG5hbWVzLmNvbnN0YW50fVwiXG4gICAgICBzZWxlY3Rpb25cbiAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICBvblNlYXJjaENoYW5nZT17aGFuZGxlU2VhcmNoQ2hhbmdlfVxuICAgICAgZGlzYWJsZWQ9eyEke25hbWVzLmNhbWVsUGx1cmFsfX1cbiAgICAgIGxvYWRpbmc9eyEke25hbWVzLmNhbWVsUGx1cmFsfX1cbiAgICAgIHNlbGVjdE9uQmx1cj17ZmFsc2V9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKTtcbn1cbiAgICAgIGAudHJpbSgpLFxuICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgfTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIkVudGl0eU1hbmFnZXIiLCJUZW1wbGF0ZSIsIlRlbXBsYXRlX192aWV3X2lkX2FzeW5jX3NlbGVjdCIsImdldFRhcmdldEFuZFBhdGgiLCJuYW1lcyIsInRhcmdldCIsInBhdGgiLCJmcyIsImNhcGl0YWwiLCJyZW5kZXIiLCJlbnRpdHlJZCIsInRleHRGaWVsZCIsImdldE5hbWVzRnJvbUlkIiwiZW50aXR5IiwiZ2V0IiwicGlja2VkUHJvcCIsInByb3BzIiwiZmluZCIsInByb3AiLCJpbmNsdWRlcyIsIm5hbWUiLCJjYW5kaWRhdGVQcm9wIiwidHlwZSIsImNvbnNvbGUiLCJsb2ciLCJib2R5IiwiY2FwaXRhbFBsdXJhbCIsImNhbWVsUGx1cmFsIiwiY2FtZWwiLCJ0aXRsZSIsImNvbnN0YW50IiwidHJpbSIsImltcG9ydEtleXMiXSwibWFwcGluZ3MiOiJBQUNBLFNBQVNBLGFBQWEsUUFBMkIsaUNBQThCO0FBQy9FLFNBQVNDLFFBQVEsUUFBUSxpQkFBYztBQUV2QyxPQUFPLE1BQU1DLHVDQUF1Q0Q7SUFDbEQsYUFBYztRQUNaLEtBQUssQ0FBQztJQUNSO0lBRUFFLGlCQUFpQkMsS0FBd0IsRUFBRTtRQUN6QyxPQUFPO1lBQ0xDLFFBQVE7WUFDUkMsTUFBTSxHQUFHRixNQUFNRyxFQUFFLENBQUMsQ0FBQyxFQUFFSCxNQUFNSSxPQUFPLENBQUMsaUJBQWlCLENBQUM7UUFDdkQ7SUFDRjtJQUVBQyxPQUFPLEVBQUVDLFFBQVEsRUFBRUMsU0FBUyxFQUEyQyxFQUFFO1FBQ3ZFLE1BQU1QLFFBQVFKLGNBQWNZLGNBQWMsQ0FBQ0Y7UUFFM0MsTUFBTUcsU0FBU2IsY0FBY2MsR0FBRyxDQUFDSjtRQUNqQyxJQUFJLENBQUNDLFdBQVc7WUFDZCxNQUFNSSxhQUFhRixPQUFPRyxLQUFLLENBQUNDLElBQUksQ0FBQyxDQUFDQyxPQUNwQztvQkFBQztvQkFBUTtpQkFBUSxDQUFDQyxRQUFRLENBQUNELEtBQUtFLElBQUk7WUFFdEMsSUFBSUwsWUFBWTtnQkFDZEosWUFBWUksV0FBV0ssSUFBSTtZQUM3QixPQUFPO2dCQUNMLE1BQU1DLGdCQUFnQlIsT0FBT0csS0FBSyxDQUFDQyxJQUFJLENBQ3JDLENBQUNDLE9BQVNBLEtBQUtJLElBQUksS0FBSztnQkFFMUIsSUFBSUQsZUFBZTtvQkFDakJWLFlBQVlVLGNBQWNELElBQUk7Z0JBQ2hDLE9BQU87b0JBQ0xHLFFBQVFDLEdBQUcsQ0FBQztnQkFDZDtZQUNGO1FBQ0Y7UUFFQSxPQUFPO1lBQ0wsR0FBRyxJQUFJLENBQUNyQixnQkFBZ0IsQ0FBQ0MsTUFBTTtZQUMvQnFCLE1BQU0sQ0FBQzs7O1NBR0osRUFBRXJCLE1BQU1JLE9BQU8sQ0FBQyxXQUFXLEVBQzVCSixNQUFNSSxPQUFPLENBQ2Q7U0FDRSxFQUFFSixNQUFNSSxPQUFPLENBQUMsNkJBQTZCLEVBQUVKLE1BQU1HLEVBQUUsQ0FBQyxDQUFDLEVBQzFESCxNQUFNRyxFQUFFLENBQ1Q7U0FDRSxFQUFFSCxNQUFNSSxPQUFPLENBQUMsZ0NBQWdDLEVBQUVKLE1BQU1HLEVBQUUsQ0FBQyxDQUFDLEVBQzdESCxNQUFNRyxFQUFFLENBQ1Q7O2dCQUVTLEVBQUVILE1BQU1JLE9BQU8sQ0FBQyx3QkFBd0IsRUFDaERKLE1BQU1JLE9BQU8sQ0FDZDs7O3FCQUdjLEVBQUVKLE1BQU1JLE9BQU8sQ0FBQzthQUN4QixFQUFFRyxZQUFZLE1BQU0sR0FBRyxRQUFRLEVBQUVQLE1BQU1JLE9BQU8sQ0FBQzt1QkFDckMsRUFBRUosTUFBTUksT0FBTyxDQUFDOzs7OytDQUlRLEVBQUVKLE1BQU1JLE9BQU8sQ0FBQzs7OzswQkFJckMsRUFBRUosTUFBTUksT0FBTyxDQUFDLFdBQVcsRUFDakRKLE1BQU1zQixhQUFhLENBQ3BCO2dCQUNhLEVBQUV0QixNQUFNdUIsV0FBVyxDQUFDOzs7O09BSTdCLEVBQUV2QixNQUFNdUIsV0FBVyxDQUFDLGFBQWEsRUFBRXZCLE1BQU13QixLQUFLLENBQUM7O2VBRXZDLEVBQUV4QixNQUFNd0IsS0FBSyxDQUFDO2lCQUNaLEVBQUV4QixNQUFNd0IsS0FBSyxDQUFDO3VCQUNSLEVBQUV4QixNQUFNd0IsS0FBSyxDQUFDLFVBQVUsRUFDbkNqQixZQUFZLENBQUMsS0FBSyxFQUFFQSxVQUFVLENBQUMsQ0FBQyxHQUFHLEdBQ3BDOzs7O01BSUwsRUFBRVAsTUFBTXVCLFdBQVcsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O21CQXFCUCxFQUFFZCxPQUFPZ0IsS0FBSyxJQUFJekIsTUFBTTBCLFFBQVEsQ0FBQzs7OztpQkFJbkMsRUFBRTFCLE1BQU11QixXQUFXLENBQUM7Z0JBQ3JCLEVBQUV2QixNQUFNdUIsV0FBVyxDQUFDOzs7Ozs7TUFNOUIsQ0FBQyxDQUFDSSxJQUFJO1lBQ05DLFlBQVksRUFBRTtRQUNoQjtJQUNGO0FBQ0YifQ==
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { RenderingNode, TemplateKey, TemplateOptions } from "
|
|
2
|
-
import { EntityNamesRecord } from "
|
|
3
|
-
import {
|
|
4
|
-
import { Template } from "./base-template";
|
|
1
|
+
import { RenderingNode, TemplateKey, TemplateOptions } from "../../types/types";
|
|
2
|
+
import { EntityNamesRecord } from "../../entity/entity-manager";
|
|
3
|
+
import { Template } from "../template";
|
|
5
4
|
export declare class Template__view_list extends Template {
|
|
6
5
|
constructor();
|
|
7
6
|
getTargetAndPath(names: EntityNamesRecord): {
|
|
@@ -17,7 +16,7 @@ export declare class Template__view_list extends Template {
|
|
|
17
16
|
orderBy: string;
|
|
18
17
|
search: string;
|
|
19
18
|
};
|
|
20
|
-
render({ entityId }: TemplateOptions["view_list"]
|
|
19
|
+
render({ entityId }: TemplateOptions["view_list"]): Promise<{
|
|
21
20
|
body: string;
|
|
22
21
|
importKeys: never[];
|
|
23
22
|
preTemplates: {
|
|
@@ -26,13 +25,6 @@ export declare class Template__view_list extends Template {
|
|
|
26
25
|
}[];
|
|
27
26
|
target: string;
|
|
28
27
|
path: string;
|
|
29
|
-
}
|
|
28
|
+
}>;
|
|
30
29
|
}
|
|
31
|
-
export declare function getEnumInfoFromColName(entityId: string, colName: string): {
|
|
32
|
-
id: string;
|
|
33
|
-
targetEntityNames: EntityNamesRecord;
|
|
34
|
-
targetEntityId: string;
|
|
35
|
-
title: string;
|
|
36
|
-
};
|
|
37
|
-
export declare function getRelationPropFromColName(entityId: string, colName: string): RelationProp;
|
|
38
30
|
//# sourceMappingURL=view_list.template.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view_list.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/view_list.template.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAiB,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAG/E,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAIvC,qBAAa,mBAAoB,SAAQ,QAAQ;;IAK/C,gBAAgB,CAAC,KAAK,EAAE,iBAAiB;;;;IAOzC,MAAM,CACJ,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,UAAU,GAAE,OAAc,EAC1B,SAAS,GAAE,MAAW;IAOxB,YAAY,CACV,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,iBAAiB,EACxB,SAAS,GAAE,MAAc,EACzB,WAAW,GAAE,OAAe,GAC3B,MAAM;IAiET,kBAAkB,CAChB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,iBAAiB,GACvB,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE;IAyBpB,kBAAkB,CAChB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,iBAAiB;IAuC1B,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,iBAAiB;IAyC3E,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG;QACpC,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;KAChB;IAkBK,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,eAAe,CAAC,WAAW,CAAC;;;;;;;;;;CA0UxD"}
|