@kaspernj/api-maker 1.0.2060 → 1.0.2061
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/build/api.d.ts.map +1 -1
- package/build/api.js +44 -51
- package/build/attribute-not-loaded-error.d.ts.map +1 -1
- package/build/attribute-not-loaded-error.js +2 -4
- package/build/base-component.d.ts.map +1 -1
- package/build/base-component.js +3 -5
- package/build/base-error.d.ts.map +1 -1
- package/build/base-error.js +11 -16
- package/build/base-model/attribute.d.ts.map +1 -1
- package/build/base-model/attribute.js +4 -9
- package/build/base-model/column.d.ts.map +1 -1
- package/build/base-model/column.js +2 -4
- package/build/base-model/reflection.d.ts.map +1 -1
- package/build/base-model/reflection.js +10 -48
- package/build/base-model/scope.d.ts.map +1 -1
- package/build/base-model/scope.js +5 -40
- package/build/base-model.js +85 -122
- package/build/bootstrap/attribute-row.d.ts.map +1 -1
- package/build/bootstrap/attribute-row.js +93 -126
- package/build/bootstrap/attribute-rows.d.ts.map +1 -1
- package/build/bootstrap/attribute-rows.js +21 -28
- package/build/bootstrap/card.d.ts.map +1 -1
- package/build/bootstrap/card.js +101 -120
- package/build/bootstrap/checkbox.d.ts.map +1 -1
- package/build/bootstrap/checkbox.js +64 -60
- package/build/bootstrap/checkboxes.d.ts.map +1 -1
- package/build/bootstrap/checkboxes.js +124 -155
- package/build/bootstrap/index.d.ts.map +1 -1
- package/build/bootstrap/index.js +2 -2
- package/build/bootstrap/input.d.ts +1 -1
- package/build/bootstrap/input.d.ts.map +1 -1
- package/build/bootstrap/input.js +108 -88
- package/build/bootstrap/invalid-feedback.d.ts +5 -2
- package/build/bootstrap/invalid-feedback.d.ts.map +1 -1
- package/build/bootstrap/invalid-feedback.js +13 -17
- package/build/bootstrap/paginate.d.ts.map +1 -1
- package/build/bootstrap/paginate.js +132 -136
- package/build/bootstrap/radio-buttons.d.ts +1 -1
- package/build/bootstrap/radio-buttons.d.ts.map +1 -1
- package/build/bootstrap/radio-buttons.js +40 -34
- package/build/bootstrap/select.d.ts +1 -1
- package/build/bootstrap/select.d.ts.map +1 -1
- package/build/bootstrap/select.js +48 -35
- package/build/bootstrap/sort-link.d.ts.map +1 -1
- package/build/bootstrap/sort-link.js +75 -112
- package/build/cable-connection-pool.d.ts +6 -7
- package/build/cable-connection-pool.d.ts.map +1 -1
- package/build/cable-connection-pool.js +30 -37
- package/build/cable-subscription-pool.d.ts.map +1 -1
- package/build/cable-subscription-pool.js +65 -103
- package/build/cable-subscription.d.ts.map +1 -1
- package/build/cable-subscription.js +6 -11
- package/build/cache-key-generator.d.ts.map +1 -1
- package/build/cache-key-generator.js +5 -10
- package/build/can-can.d.ts.map +1 -1
- package/build/can-can.js +37 -77
- package/build/channels-consumer.d.ts.map +1 -1
- package/build/channels-consumer.js +5 -9
- package/build/collection-loader.d.ts.map +1 -1
- package/build/collection-loader.js +31 -35
- package/build/collection.d.ts.map +1 -1
- package/build/collection.js +20 -58
- package/build/command-submit-data.d.ts.map +1 -1
- package/build/command-submit-data.js +8 -13
- package/build/commands-pool.d.ts.map +1 -1
- package/build/commands-pool.js +77 -82
- package/build/compose.d.ts.map +1 -1
- package/build/compose.js +2 -4
- package/build/config.d.ts.map +1 -1
- package/build/config.js +5 -39
- package/build/custom-error.d.ts.map +1 -1
- package/build/custom-error.js +4 -8
- package/build/data-set-to-attributes.d.ts.map +1 -1
- package/build/data-set-to-attributes.js +3 -38
- package/build/deserializer.d.ts.map +1 -1
- package/build/deserializer.js +18 -56
- package/build/destroy-error.d.ts.map +1 -1
- package/build/destroy-error.js +4 -8
- package/build/devise.d.ts.map +1 -1
- package/build/devise.js +17 -55
- package/build/draggable-sort/controller.d.ts.map +1 -1
- package/build/draggable-sort/controller.js +79 -81
- package/build/draggable-sort/index.d.ts.map +1 -1
- package/build/draggable-sort/index.js +68 -109
- package/build/draggable-sort/item.d.ts.map +1 -1
- package/build/draggable-sort/item.js +132 -173
- package/build/error-logger.d.ts.map +1 -1
- package/build/error-logger.js +9 -14
- package/build/error-messages.d.ts.map +1 -1
- package/build/error-messages.js +5 -7
- package/build/event-connection.d.ts +4 -1
- package/build/event-connection.d.ts.map +1 -1
- package/build/event-connection.js +16 -21
- package/build/event-emitter-listener.d.ts.map +1 -1
- package/build/event-emitter-listener.js +4 -8
- package/build/event-model-class.d.ts +4 -1
- package/build/event-model-class.d.ts.map +1 -1
- package/build/event-model-class.js +13 -21
- package/build/events.d.ts.map +1 -1
- package/build/events.js +4 -5
- package/build/form.d.ts +3 -2
- package/build/form.d.ts.map +1 -1
- package/build/form.js +54 -96
- package/build/history-expo.d.ts.map +1 -1
- package/build/history-expo.js +6 -10
- package/build/history-react-native.d.ts.map +1 -1
- package/build/history-react-native.js +9 -13
- package/build/history.d.ts.map +1 -1
- package/build/history.js +3 -4
- package/build/index.d.ts.map +1 -1
- package/build/index.js +2 -4
- package/build/inputs/attachment.d.ts.map +1 -1
- package/build/inputs/attachment.js +84 -83
- package/build/inputs/auto-submit.d.ts.map +1 -1
- package/build/inputs/auto-submit.js +6 -41
- package/build/inputs/checkbox.d.ts.map +1 -1
- package/build/inputs/checkbox.js +81 -121
- package/build/inputs/checkboxes.d.ts +1 -1
- package/build/inputs/checkboxes.d.ts.map +1 -1
- package/build/inputs/checkboxes.js +83 -112
- package/build/inputs/id-for-component.d.ts.map +1 -1
- package/build/inputs/id-for-component.js +3 -38
- package/build/inputs/input-wrapper.d.ts +2 -1
- package/build/inputs/input-wrapper.d.ts.map +1 -1
- package/build/inputs/input-wrapper.js +6 -11
- package/build/inputs/input.d.ts +1 -1
- package/build/inputs/input.d.ts.map +1 -1
- package/build/inputs/input.js +160 -199
- package/build/inputs/money.d.ts.map +1 -1
- package/build/inputs/money.js +129 -162
- package/build/inputs/name-for-component.d.ts.map +1 -1
- package/build/inputs/name-for-component.js +3 -38
- package/build/inputs/select.d.ts +1 -1
- package/build/inputs/select.d.ts.map +1 -1
- package/build/inputs/select.js +74 -77
- package/build/instance-of-class-name.d.ts.map +1 -1
- package/build/instance-of-class-name.js +5 -6
- package/build/is-expo.d.ts.map +1 -1
- package/build/is-expo.js +6 -7
- package/build/key-value-store.d.ts.map +1 -1
- package/build/key-value-store.js +4 -9
- package/build/link.d.ts.map +1 -1
- package/build/link.js +53 -63
- package/build/logger.d.ts.map +1 -1
- package/build/logger.js +4 -6
- package/build/merge-styles.d.ts.map +1 -1
- package/build/merge-styles.js +4 -6
- package/build/modal.d.ts.map +1 -1
- package/build/modal.js +24 -24
- package/build/model-class-require.d.ts.map +1 -1
- package/build/model-class-require.js +4 -39
- package/build/model-events.d.ts.map +1 -1
- package/build/model-events.js +14 -19
- package/build/model-name.d.ts.map +1 -1
- package/build/model-name.js +7 -45
- package/build/model-prop-type.d.ts.map +1 -1
- package/build/model-prop-type.js +9 -14
- package/build/model-recipes-loader.d.ts.map +1 -1
- package/build/model-recipes-loader.js +8 -13
- package/build/model-recipes-model-loader.d.ts +7 -7
- package/build/model-recipes-model-loader.d.ts.map +1 -1
- package/build/model-recipes-model-loader.js +18 -56
- package/build/models-response-reader.d.ts.map +1 -1
- package/build/models-response-reader.js +7 -45
- package/build/models.d.ts.map +1 -1
- package/build/models.js +5 -9
- package/build/money-formatter.d.ts +2 -2
- package/build/money-formatter.d.ts.map +1 -1
- package/build/money-formatter.js +13 -18
- package/build/not-loaded-error.d.ts.map +1 -1
- package/build/not-loaded-error.js +2 -4
- package/build/params.d.ts.map +1 -1
- package/build/params.js +13 -18
- package/build/preloaded.d.ts.map +1 -1
- package/build/preloaded.js +5 -43
- package/build/resize-observer.d.ts.map +1 -1
- package/build/resize-observer.js +6 -10
- package/build/rest-props-validator.d.ts.map +1 -1
- package/build/rest-props-validator.js +2 -3
- package/build/result.d.ts.map +1 -1
- package/build/result.js +2 -4
- package/build/router/route.d.ts +4 -4
- package/build/router/route.d.ts.map +1 -1
- package/build/router/route.js +188 -224
- package/build/router/switch.d.ts +2 -1
- package/build/router/switch.d.ts.map +1 -1
- package/build/router/switch.js +57 -99
- package/build/router.d.ts +2 -1
- package/build/router.d.ts.map +1 -1
- package/build/router.js +37 -73
- package/build/routes-native.d.ts.map +1 -1
- package/build/routes-native.js +15 -53
- package/build/routes.d.ts.map +1 -1
- package/build/routes.js +13 -48
- package/build/run-last.d.ts.map +1 -1
- package/build/run-last.js +11 -13
- package/build/serializer.d.ts.map +1 -1
- package/build/serializer.js +5 -7
- package/build/services.d.ts.map +1 -1
- package/build/services.js +4 -9
- package/build/session-status-updater.d.ts.map +1 -1
- package/build/session-status-updater.js +21 -59
- package/build/source-maps-loader.js +12 -50
- package/build/super-admin/config-reader.d.ts.map +1 -1
- package/build/super-admin/config-reader.js +9 -44
- package/build/super-admin/edit-page/edit-attribute-checkbox.d.ts.map +1 -1
- package/build/super-admin/edit-page/edit-attribute-checkbox.js +53 -94
- package/build/super-admin/edit-page/edit-attribute-content.d.ts.map +1 -1
- package/build/super-admin/edit-page/edit-attribute-content.js +47 -56
- package/build/super-admin/edit-page/edit-attribute-input.d.ts.map +1 -1
- package/build/super-admin/edit-page/edit-attribute-input.js +60 -98
- package/build/super-admin/edit-page/edit-attribute.d.ts.map +1 -1
- package/build/super-admin/edit-page/edit-attribute.js +45 -79
- package/build/super-admin/edit-page.d.ts.map +1 -1
- package/build/super-admin/edit-page.js +95 -128
- package/build/super-admin/has-edit-config.d.ts.map +1 -1
- package/build/super-admin/has-edit-config.js +4 -8
- package/build/super-admin/index-page.d.ts.map +1 -1
- package/build/super-admin/index-page.js +19 -24
- package/build/super-admin/index.d.ts.map +1 -1
- package/build/super-admin/index.js +101 -115
- package/build/super-admin/layout/header/index.d.ts +25 -1
- package/build/super-admin/layout/header/index.d.ts.map +1 -1
- package/build/super-admin/layout/header/index.js +116 -142
- package/build/super-admin/layout/index.d.ts.map +1 -1
- package/build/super-admin/layout/index.js +88 -111
- package/build/super-admin/layout/menu/index.d.ts +4 -1
- package/build/super-admin/layout/menu/index.d.ts.map +1 -1
- package/build/super-admin/layout/menu/index.js +113 -132
- package/build/super-admin/layout/menu/menu-content.d.ts.map +1 -1
- package/build/super-admin/layout/menu/menu-content.js +26 -64
- package/build/super-admin/layout/menu/menu-item.d.ts.map +1 -1
- package/build/super-admin/layout/menu/menu-item.js +55 -62
- package/build/super-admin/layout/no-access.d.ts.map +1 -1
- package/build/super-admin/layout/no-access.js +16 -19
- package/build/super-admin/model-class-table.d.ts.map +1 -1
- package/build/super-admin/model-class-table.js +45 -88
- package/build/super-admin/models.d.ts.map +1 -1
- package/build/super-admin/models.js +3 -37
- package/build/super-admin/show-nav.d.ts.map +1 -1
- package/build/super-admin/show-nav.js +37 -66
- package/build/super-admin/show-page/belongs-to-attribute-row.d.ts.map +1 -1
- package/build/super-admin/show-page/belongs-to-attribute-row.js +20 -51
- package/build/super-admin/show-page/index.d.ts.map +1 -1
- package/build/super-admin/show-page/index.js +102 -137
- package/build/super-admin/show-reflection-actions.d.ts.map +1 -1
- package/build/super-admin/show-reflection-actions.js +42 -78
- package/build/super-admin/show-reflection-link.d.ts.map +1 -1
- package/build/super-admin/show-reflection-link.js +23 -27
- package/build/super-admin/show-reflection-page.d.ts.map +1 -1
- package/build/super-admin/show-reflection-page.js +36 -73
- package/build/table/column-content.d.ts.map +1 -1
- package/build/table/column-content.js +58 -97
- package/build/table/column-identifier.d.ts.map +1 -1
- package/build/table/column-identifier.js +2 -4
- package/build/table/column-visible.d.ts.map +1 -1
- package/build/table/column-visible.js +2 -4
- package/build/table/components/column.d.ts.map +1 -1
- package/build/table/components/column.js +8 -13
- package/build/table/components/flat-list.d.ts.map +1 -1
- package/build/table/components/flat-list.js +8 -13
- package/build/table/components/header.d.ts.map +1 -1
- package/build/table/components/header.js +10 -15
- package/build/table/components/row.d.ts.map +1 -1
- package/build/table/components/row.js +10 -15
- package/build/table/filters/attribute-element.d.ts.map +1 -1
- package/build/table/filters/attribute-element.js +38 -44
- package/build/table/filters/filter-form.d.ts.map +1 -1
- package/build/table/filters/filter-form.js +315 -312
- package/build/table/filters/filter.d.ts.map +1 -1
- package/build/table/filters/filter.js +54 -54
- package/build/table/filters/index.d.ts.map +1 -1
- package/build/table/filters/index.js +114 -106
- package/build/table/filters/load-search-modal.d.ts.map +1 -1
- package/build/table/filters/load-search-modal.js +95 -114
- package/build/table/filters/reflection-element.d.ts.map +1 -1
- package/build/table/filters/reflection-element.js +30 -36
- package/build/table/filters/save-search-modal.d.ts.map +1 -1
- package/build/table/filters/save-search-modal.js +46 -46
- package/build/table/filters/scope-element.d.ts.map +1 -1
- package/build/table/filters/scope-element.js +32 -38
- package/build/table/header-column-content.d.ts.map +1 -1
- package/build/table/header-column-content.js +37 -39
- package/build/table/header-column.d.ts.map +1 -1
- package/build/table/header-column.js +92 -131
- package/build/table/header-select.d.ts.map +1 -1
- package/build/table/header-select.js +57 -54
- package/build/table/model-callback-args.d.ts.map +1 -1
- package/build/table/model-callback-args.js +3 -38
- package/build/table/model-column.d.ts.map +1 -1
- package/build/table/model-column.js +67 -98
- package/build/table/model-row.d.ts.map +1 -1
- package/build/table/model-row.js +89 -115
- package/build/table/select-calculator.d.ts.map +1 -1
- package/build/table/select-calculator.js +13 -51
- package/build/table/settings/column-row.d.ts.map +1 -1
- package/build/table/settings/column-row.js +70 -106
- package/build/table/settings/download-action.d.ts.map +1 -1
- package/build/table/settings/download-action.js +58 -48
- package/build/table/settings/index.d.ts.map +1 -1
- package/build/table/settings/index.js +52 -80
- package/build/table/table-settings.d.ts.map +1 -1
- package/build/table/table-settings.js +169 -207
- package/build/table/table.d.ts.map +1 -1
- package/build/table/table.js +639 -616
- package/build/table/use-sorting.d.ts.map +1 -1
- package/build/table/use-sorting.js +6 -11
- package/build/table/widths.d.ts.map +1 -1
- package/build/table/widths.js +9 -11
- package/build/table/worker-plugins-check-all-checkbox.d.ts.map +1 -1
- package/build/table/worker-plugins-check-all-checkbox.js +74 -117
- package/build/table/worker-plugins-checkbox.d.ts.map +1 -1
- package/build/table/worker-plugins-checkbox.js +72 -115
- package/build/translated-attributes.d.ts.map +1 -1
- package/build/translated-attributes.js +2 -4
- package/build/translated-collections.d.ts.map +1 -1
- package/build/translated-collections.js +8 -13
- package/build/updated-attribute.d.ts +2 -1
- package/build/updated-attribute.d.ts.map +1 -1
- package/build/updated-attribute.js +16 -21
- package/build/url-encode.d.ts.map +1 -1
- package/build/url-encode.js +4 -9
- package/build/use-breakpoint.d.ts.map +1 -1
- package/build/use-breakpoint.js +20 -58
- package/build/use-can-can.d.ts.map +1 -1
- package/build/use-can-can.js +15 -20
- package/build/use-collection.d.ts +4 -4
- package/build/use-collection.d.ts.map +1 -1
- package/build/use-collection.js +33 -70
- package/build/use-created-event.d.ts.map +1 -1
- package/build/use-created-event.js +22 -26
- package/build/use-current-user-context.d.ts +1 -1
- package/build/use-current-user-context.d.ts.map +1 -1
- package/build/use-current-user-context.js +37 -73
- package/build/use-current-user.d.ts.map +1 -1
- package/build/use-current-user.js +11 -16
- package/build/use-destroyed-event.d.ts.map +1 -1
- package/build/use-destroyed-event.js +13 -17
- package/build/use-event-emitter.d.ts.map +1 -1
- package/build/use-event-emitter.js +7 -12
- package/build/use-event-listener.d.ts.map +1 -1
- package/build/use-event-listener.js +7 -11
- package/build/use-input.d.ts.map +1 -1
- package/build/use-input.js +28 -32
- package/build/use-model-event.d.ts.map +1 -1
- package/build/use-model-event.js +13 -17
- package/build/use-model.d.ts.map +1 -1
- package/build/use-model.js +27 -64
- package/build/use-resize-observer.d.ts.map +1 -1
- package/build/use-resize-observer.js +8 -12
- package/build/use-router.d.ts +5 -2
- package/build/use-router.d.ts.map +1 -1
- package/build/use-router.js +24 -61
- package/build/use-screen-layout.d.ts.map +1 -1
- package/build/use-screen-layout.js +11 -15
- package/build/use-styles.d.ts +1 -1
- package/build/use-styles.d.ts.map +1 -1
- package/build/use-styles.js +13 -51
- package/build/use-updated-event.d.ts.map +1 -1
- package/build/use-updated-event.js +13 -17
- package/build/use-validation-errors.d.ts.map +1 -1
- package/build/use-validation-errors.js +9 -13
- package/build/utils/button.d.ts.map +1 -1
- package/build/utils/button.js +93 -95
- package/build/utils/card.d.ts.map +1 -1
- package/build/utils/card.js +38 -70
- package/build/utils/checkbox.d.ts.map +1 -1
- package/build/utils/checkbox.js +56 -92
- package/build/utils/checkboxes.d.ts.map +1 -1
- package/build/utils/checkboxes.js +111 -150
- package/build/utils/default-style.d.ts +7 -3
- package/build/utils/default-style.d.ts.map +1 -1
- package/build/utils/default-style.js +16 -55
- package/build/utils/header.d.ts +2 -1
- package/build/utils/header.d.ts.map +1 -1
- package/build/utils/header.js +6 -11
- package/build/utils/icon.d.ts.map +1 -1
- package/build/utils/icon.js +22 -60
- package/build/utils/invalid-feedback.d.ts.map +1 -1
- package/build/utils/invalid-feedback.js +17 -22
- package/build/utils/modal.d.ts.map +1 -1
- package/build/utils/modal.js +30 -63
- package/build/utils/text.d.ts.map +1 -1
- package/build/utils/text.js +10 -13
- package/build/validation-error.d.ts.map +1 -1
- package/build/validation-error.js +24 -62
- package/build/validation-errors.d.ts.map +1 -1
- package/build/validation-errors.js +24 -63
- package/build/with-api-maker.d.ts.map +1 -1
- package/build/with-api-maker.js +13 -51
- package/build/with-collection.d.ts.map +1 -1
- package/build/with-collection.js +11 -49
- package/build/with-current-user.d.ts +2 -1
- package/build/with-current-user.d.ts.map +1 -1
- package/build/with-current-user.js +6 -11
- package/build/with-model.d.ts.map +1 -1
- package/build/with-model.js +8 -13
- package/build/with-router.d.ts +2 -1
- package/build/with-router.d.ts.map +1 -1
- package/build/with-router.js +6 -11
- package/package.json +4 -2
|
@@ -1,66 +1,27 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
40
|
-
const react_1 = __importStar(require("react"));
|
|
41
|
-
const react_native_1 = require("react-native");
|
|
42
|
-
const base_component_js_1 = __importDefault(require("../base-component.js"));
|
|
43
|
-
const config_reader_js_1 = __importDefault(require("./config-reader.js"));
|
|
44
|
-
const edit_page_1 = __importDefault(require("./edit-page"));
|
|
45
|
-
const flash_notifications_js_1 = __importDefault(require("flash-notifications/build/flash-notifications.js"));
|
|
46
|
-
const has_edit_config_js_1 = __importDefault(require("./has-edit-config.js"));
|
|
47
|
-
const index_page_1 = __importDefault(require("./index-page"));
|
|
48
|
-
const index_1 = __importDefault(require("./layout/index"));
|
|
49
|
-
const link_1 = __importDefault(require("../link"));
|
|
50
|
-
const memo_js_1 = __importDefault(require("set-state-compare/build/memo.js"));
|
|
1
|
+
import React, { useMemo } from "react";
|
|
2
|
+
import { Pressable, StyleSheet, View } from "react-native";
|
|
3
|
+
import BaseComponent from "../base-component.js";
|
|
4
|
+
import ConfigReader from "./config-reader.js";
|
|
5
|
+
import EditPage from "./edit-page";
|
|
6
|
+
import FlashNotifications from "flash-notifications/build/flash-notifications.js";
|
|
7
|
+
import hasEditConfig from "./has-edit-config.js";
|
|
8
|
+
import IndexPage from "./index-page";
|
|
9
|
+
import Layout from "./layout/index";
|
|
10
|
+
import Link from "../link";
|
|
11
|
+
import memo from "set-state-compare/build/memo.js";
|
|
51
12
|
// @ts-expect-error
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
const styles =
|
|
13
|
+
import * as models from "models.js";
|
|
14
|
+
import Params from "../params.js";
|
|
15
|
+
import { shapeComponent } from "set-state-compare/build/shape-component.js";
|
|
16
|
+
import ShowPage from "./show-page/index";
|
|
17
|
+
import ShowReflectionActions from "./show-reflection-actions";
|
|
18
|
+
import ShowReflectionPage from "./show-reflection-page";
|
|
19
|
+
import Text from "../utils/text";
|
|
20
|
+
import useCanCan from "../use-can-can.js";
|
|
21
|
+
import useCurrentUser from "../use-current-user.js";
|
|
22
|
+
import useQueryParams from "on-location-changed/build/use-query-params.js";
|
|
23
|
+
import useStyles from "../use-styles.js";
|
|
24
|
+
const styles = StyleSheet.create({
|
|
64
25
|
actionsView: {
|
|
65
26
|
flexDirection: "row",
|
|
66
27
|
alignItems: "center"
|
|
@@ -78,54 +39,20 @@ const styles = react_native_1.StyleSheet.create({
|
|
|
78
39
|
marginRight: 10
|
|
79
40
|
}
|
|
80
41
|
});
|
|
81
|
-
|
|
82
|
-
constructor() {
|
|
83
|
-
super(...arguments);
|
|
84
|
-
this.loadModel = async () => {
|
|
85
|
-
const { configReader, modelClass, modelId, modelName } = this.tt;
|
|
86
|
-
if (modelId && modelClass) {
|
|
87
|
-
const abilities = {};
|
|
88
|
-
const abilitiesForModel = ["destroy", "edit"];
|
|
89
|
-
const layoutSelect = configReader?.modelConfig?.layout?.select;
|
|
90
|
-
abilities[modelName] = abilitiesForModel;
|
|
91
|
-
const query = await modelClass
|
|
92
|
-
.ransack({ id_eq: modelId })
|
|
93
|
-
.abilities(abilities);
|
|
94
|
-
if (layoutSelect)
|
|
95
|
-
query.select(layoutSelect);
|
|
96
|
-
const model = await query.first();
|
|
97
|
-
this.setState({ model });
|
|
98
|
-
}
|
|
99
|
-
else {
|
|
100
|
-
this.setState({ model: undefined });
|
|
101
|
-
}
|
|
102
|
-
};
|
|
103
|
-
this.onDestroyClicked = async () => {
|
|
104
|
-
if (!confirm("Are you sure?")) {
|
|
105
|
-
return;
|
|
106
|
-
}
|
|
107
|
-
try {
|
|
108
|
-
await this.s.model.destroy();
|
|
109
|
-
params_js_1.default.changeParams({ mode: undefined, model_id: undefined });
|
|
110
|
-
}
|
|
111
|
-
catch (error) {
|
|
112
|
-
flash_notifications_js_1.default.errorResponse(error);
|
|
113
|
-
}
|
|
114
|
-
};
|
|
115
|
-
}
|
|
42
|
+
export default memo(shapeComponent(class ApiMakerSuperAdmin extends BaseComponent {
|
|
116
43
|
setup() {
|
|
117
|
-
this.queryParams = (
|
|
44
|
+
this.queryParams = useQueryParams();
|
|
118
45
|
if (this.queryParams.model) {
|
|
119
46
|
this.modelClass = models[this.queryParams.model];
|
|
120
47
|
}
|
|
121
48
|
else {
|
|
122
49
|
this.modelClass = null;
|
|
123
50
|
}
|
|
124
|
-
this.configReader =
|
|
51
|
+
this.configReader = useMemo(() => this.modelClass && ConfigReader.forModel(this.modelClass), [this.modelClass]);
|
|
125
52
|
this.modelId = this.queryParams.model_id;
|
|
126
53
|
this.modelName = this.modelClass?.modelClassData()?.name;
|
|
127
|
-
this.currentUser = (
|
|
128
|
-
this.canCan = (
|
|
54
|
+
this.currentUser = useCurrentUser();
|
|
55
|
+
this.canCan = useCanCan(() => {
|
|
129
56
|
const abilities = [];
|
|
130
57
|
if (this.modelClass)
|
|
131
58
|
abilities.push([this.modelClass, ["new"]]);
|
|
@@ -134,8 +61,27 @@ exports.default = (0, memo_js_1.default)((0, shape_component_js_1.shapeComponent
|
|
|
134
61
|
this.useStates({
|
|
135
62
|
model: undefined
|
|
136
63
|
});
|
|
137
|
-
|
|
64
|
+
useMemo(() => { this.loadModel(); }, [this.modelId]);
|
|
138
65
|
}
|
|
66
|
+
loadModel = async () => {
|
|
67
|
+
const { configReader, modelClass, modelId, modelName } = this.tt;
|
|
68
|
+
if (modelId && modelClass) {
|
|
69
|
+
const abilities = {};
|
|
70
|
+
const abilitiesForModel = ["destroy", "edit"];
|
|
71
|
+
const layoutSelect = configReader?.modelConfig?.layout?.select;
|
|
72
|
+
abilities[modelName] = abilitiesForModel;
|
|
73
|
+
const query = await modelClass
|
|
74
|
+
.ransack({ id_eq: modelId })
|
|
75
|
+
.abilities(abilities);
|
|
76
|
+
if (layoutSelect)
|
|
77
|
+
query.select(layoutSelect);
|
|
78
|
+
const model = await query.first();
|
|
79
|
+
this.setState({ model });
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
this.setState({ model: undefined });
|
|
83
|
+
}
|
|
84
|
+
};
|
|
139
85
|
render() {
|
|
140
86
|
const { canCan, configReader, modelClass, modelId, modelName, queryParams } = this.tt;
|
|
141
87
|
const { model } = this.s;
|
|
@@ -159,18 +105,58 @@ exports.default = (0, memo_js_1.default)((0, shape_component_js_1.shapeComponent
|
|
|
159
105
|
else {
|
|
160
106
|
pageToShow = "welcome";
|
|
161
107
|
}
|
|
162
|
-
const actionsViewStyle = (
|
|
163
|
-
const actions =
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
108
|
+
const actionsViewStyle = useStyles(styles, "actionsView");
|
|
109
|
+
const actions = useMemo(() => <View style={actionsViewStyle}>
|
|
110
|
+
{model && modelConfigActions && modelConfigActions({ model })}
|
|
111
|
+
{modelClass && pageToShow == "index" &&
|
|
112
|
+
<>
|
|
113
|
+
{canCan?.can("new", modelClass) && hasEditConfig(modelClass) &&
|
|
114
|
+
<Link dataSet={{ class: "create-new-model-link" }} style={styles.createNewModelLink} to={Params.withParams({ model: modelName, mode: "new" })}>
|
|
115
|
+
<Text>
|
|
116
|
+
Create new
|
|
117
|
+
</Text>
|
|
118
|
+
</Link>}
|
|
119
|
+
</>}
|
|
120
|
+
{model && pageToShow == "show" &&
|
|
121
|
+
<>
|
|
122
|
+
{model.can("edit") && hasEditConfig(modelClass) &&
|
|
123
|
+
<Link dataSet={{ class: "edit-model-link" }} style={styles.editModelLink} to={Params.withParams({ model: modelName, model_id: modelId, mode: "edit" })}>
|
|
124
|
+
<Text>
|
|
125
|
+
Edit
|
|
126
|
+
</Text>
|
|
127
|
+
</Link>}
|
|
128
|
+
{model.can("destroy") &&
|
|
129
|
+
<Pressable dataSet={{ class: "destroy-model-link" }} onPress={this.tt.onDestroyClicked} style={styles.destroyModelLink}>
|
|
130
|
+
<Text>
|
|
131
|
+
Delete
|
|
132
|
+
</Text>
|
|
133
|
+
</Pressable>}
|
|
134
|
+
</>}
|
|
135
|
+
{pageToShow == "show_reflection" &&
|
|
136
|
+
<ShowReflectionActions model={model} modelClass={modelClass} reflectionName={queryParams.model_reflection}/>}
|
|
137
|
+
</View>, [canCan, configReader?.actions, model, modelClass, pageToShow]);
|
|
138
|
+
return (<Layout actions={actions} active={queryParams.model} headerTitle={modelClass?.modelName()?.human({ count: 2 })}>
|
|
139
|
+
{pageToShow == "index" &&
|
|
140
|
+
<IndexPage key={`index-page-${modelName}`} modelClass={modelClass}/>}
|
|
141
|
+
{pageToShow == "show" &&
|
|
142
|
+
<ShowPage key={`show-page-${modelName}-${modelId}`} modelClass={modelClass} modelId={modelId}/>}
|
|
143
|
+
{pageToShow == "show_reflection" &&
|
|
144
|
+
<ShowReflectionPage key={`show-reflection-page-${modelName}-${modelId}`} modelClass={modelClass} modelId={modelId}/>}
|
|
145
|
+
{pageToShow == "edit" &&
|
|
146
|
+
<EditPage key={`edit-page-${modelName}-${modelId}`} modelClass={modelClass}/>}
|
|
147
|
+
</Layout>);
|
|
175
148
|
}
|
|
149
|
+
onDestroyClicked = async () => {
|
|
150
|
+
if (!confirm("Are you sure?")) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
try {
|
|
154
|
+
await this.s.model.destroy();
|
|
155
|
+
Params.changeParams({ mode: undefined, model_id: undefined });
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
FlashNotifications.errorResponse(error);
|
|
159
|
+
}
|
|
160
|
+
};
|
|
176
161
|
}));
|
|
162
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbInN1cGVyLWFkbWluL2luZGV4LmpzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxFQUFDLE9BQU8sRUFBQyxNQUFNLE9BQU8sQ0FBQTtBQUNwQyxPQUFPLEVBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDeEQsT0FBTyxhQUFhLE1BQU0sc0JBQXNCLENBQUE7QUFDaEQsT0FBTyxZQUFZLE1BQU0sb0JBQW9CLENBQUE7QUFDN0MsT0FBTyxRQUFRLE1BQU0sYUFBYSxDQUFBO0FBQ2xDLE9BQU8sa0JBQWtCLE1BQU0sa0RBQWtELENBQUE7QUFDakYsT0FBTyxhQUFhLE1BQU0sc0JBQXNCLENBQUE7QUFDaEQsT0FBTyxTQUFTLE1BQU0sY0FBYyxDQUFBO0FBQ3BDLE9BQU8sTUFBTSxNQUFNLGdCQUFnQixDQUFBO0FBQ25DLE9BQU8sSUFBSSxNQUFNLFNBQVMsQ0FBQTtBQUMxQixPQUFPLElBQUksTUFBTSxpQ0FBaUMsQ0FBQTtBQUNsRCxtQkFBbUI7QUFDbkIsT0FBTyxLQUFLLE1BQU0sTUFBTSxXQUFXLENBQUE7QUFDbkMsT0FBTyxNQUFNLE1BQU0sY0FBYyxDQUFBO0FBQ2pDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQTtBQUN6RSxPQUFPLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQTtBQUN4QyxPQUFPLHFCQUFxQixNQUFNLDJCQUEyQixDQUFBO0FBQzdELE9BQU8sa0JBQWtCLE1BQU0sd0JBQXdCLENBQUE7QUFDdkQsT0FBTyxJQUFJLE1BQU0sZUFBZSxDQUFBO0FBQ2hDLE9BQU8sU0FBUyxNQUFNLG1CQUFtQixDQUFBO0FBQ3pDLE9BQU8sY0FBYyxNQUFNLHdCQUF3QixDQUFBO0FBQ25ELE9BQU8sY0FBYyxNQUFNLCtDQUErQyxDQUFBO0FBQzFFLE9BQU8sU0FBUyxNQUFNLGtCQUFrQixDQUFBO0FBRXhDLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7SUFDL0IsV0FBVyxFQUFFO1FBQ1gsYUFBYSxFQUFFLEtBQUs7UUFDcEIsVUFBVSxFQUFFLFFBQVE7S0FDckI7SUFDRCxrQkFBa0IsRUFBRTtRQUNsQixVQUFVLEVBQUUsRUFBRTtRQUNkLFdBQVcsRUFBRSxFQUFFO0tBQ2hCO0lBQ0QsZ0JBQWdCLEVBQUU7UUFDaEIsVUFBVSxFQUFFLEVBQUU7UUFDZCxXQUFXLEVBQUUsRUFBRTtLQUNoQjtJQUNELGFBQWEsRUFBRTtRQUNiLFVBQVUsRUFBRSxFQUFFO1FBQ2QsV0FBVyxFQUFFLEVBQUU7S0FDaEI7Q0FDRixDQUFDLENBQUE7QUFFRixlQUFlLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxrQkFBbUIsU0FBUSxhQUFhO0lBQy9FLEtBQUs7UUFDSCxJQUFJLENBQUMsV0FBVyxHQUFHLGNBQWMsRUFBRSxDQUFBO1FBRW5DLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ2xELENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUE7UUFDeEIsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQTtRQUMvRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFBO1FBQ3hDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUUsRUFBRSxJQUFJLENBQUE7UUFDeEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxjQUFjLEVBQUUsQ0FBQTtRQUVuQyxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FDckIsR0FBRyxFQUFFO1lBQ0gsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFBO1lBRXBCLElBQUksSUFBSSxDQUFDLFVBQVU7Z0JBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFFL0QsT0FBTyxTQUFTLENBQUE7UUFDbEIsQ0FBQyxFQUNELENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQzFDLENBQUE7UUFFRCxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ2IsS0FBSyxFQUFFLFNBQVM7U0FDakIsQ0FBQyxDQUFBO1FBQ0YsT0FBTyxDQUNMLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQSxDQUFDLENBQUMsRUFDMUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQ2YsQ0FBQTtJQUNILENBQUM7SUFFRCxTQUFTLEdBQUcsS0FBSyxJQUFJLEVBQUU7UUFDckIsTUFBTSxFQUFDLFlBQVksRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUE7UUFFOUQsSUFBSSxPQUFPLElBQUksVUFBVSxFQUFFLENBQUM7WUFDMUIsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFBO1lBQ3BCLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUE7WUFDN0MsTUFBTSxZQUFZLEdBQUcsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFBO1lBRTlELFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxpQkFBaUIsQ0FBQTtZQUV4QyxNQUFNLEtBQUssR0FBRyxNQUFNLFVBQVU7aUJBQzNCLE9BQU8sQ0FBQyxFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUMsQ0FBQztpQkFDekIsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1lBRXZCLElBQUksWUFBWTtnQkFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFBO1lBRTVDLE1BQU0sS0FBSyxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFBO1lBRWpDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBQyxLQUFLLEVBQUMsQ0FBQyxDQUFBO1FBQ3hCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFDLEtBQUssRUFBRSxTQUFTLEVBQUMsQ0FBQyxDQUFBO1FBQ25DLENBQUM7SUFDSCxDQUFDLENBQUE7SUFFRCxNQUFNO1FBQ0osTUFBTSxFQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQTtRQUNuRixNQUFNLEVBQUMsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUN0QixNQUFNLGtCQUFrQixHQUFHLFlBQVksRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFBO1FBQzdELElBQUksVUFBVSxDQUFBO1FBRWQsSUFBSSxXQUFXLENBQUMsS0FBSyxJQUFJLFdBQVcsQ0FBQyxRQUFRLElBQUksV0FBVyxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDOUUsVUFBVSxHQUFHLGlCQUFpQixDQUFBO1FBQ2hDLENBQUM7YUFBTSxJQUFJLFdBQVcsQ0FBQyxLQUFLLElBQUksV0FBVyxDQUFDLFFBQVEsSUFBSSxXQUFXLENBQUMsSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ25GLFVBQVUsR0FBRyxNQUFNLENBQUE7UUFDckIsQ0FBQzthQUFNLElBQUksV0FBVyxDQUFDLEtBQUssSUFBSSxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDckQsVUFBVSxHQUFHLE1BQU0sQ0FBQTtRQUNyQixDQUFDO2FBQU0sSUFBSSxXQUFXLENBQUMsS0FBSyxJQUFJLFdBQVcsQ0FBQyxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDMUQsVUFBVSxHQUFHLE1BQU0sQ0FBQTtRQUNyQixDQUFDO2FBQU0sSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDN0IsVUFBVSxHQUFHLE9BQU8sQ0FBQTtRQUN0QixDQUFDO2FBQU0sQ0FBQztZQUNOLFVBQVUsR0FBRyxTQUFTLENBQUE7UUFDeEIsQ0FBQztRQUVELE1BQU0sZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQTtRQUV6RCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQ3JCLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQ2xDO1FBQUEsQ0FBQyxLQUFLLElBQUksa0JBQWtCLElBQUksa0JBQWtCLENBQUMsRUFBQyxLQUFLLEVBQUMsQ0FBQyxDQUMzRDtRQUFBLENBQUMsVUFBVSxJQUFJLFVBQVUsSUFBSSxPQUFPO2dCQUNsQyxFQUNFO1lBQUEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsSUFBSSxhQUFhLENBQUMsVUFBVSxDQUFDO3dCQUMxRCxDQUFDLElBQUksQ0FDSCxPQUFPLENBQUMsQ0FBQyxFQUFDLEtBQUssRUFBRSx1QkFBdUIsRUFBQyxDQUFDLENBQzFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUNqQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQyxDQUV2RDtnQkFBQSxDQUFDLElBQUksQ0FDSDs7Z0JBQ0YsRUFBRSxJQUFJLENBQ1I7Y0FBQSxFQUFFLElBQUksQ0FDUixDQUNGO1VBQUEsR0FDRixDQUNBO1FBQUEsQ0FBQyxLQUFLLElBQUksVUFBVSxJQUFJLE1BQU07Z0JBQzVCLEVBQ0U7WUFBQSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksYUFBYSxDQUFDLFVBQVUsQ0FBQzt3QkFDN0MsQ0FBQyxJQUFJLENBQ0gsT0FBTyxDQUFDLENBQUMsRUFBQyxLQUFLLEVBQUUsaUJBQWlCLEVBQUMsQ0FBQyxDQUNwQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQzVCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUMsQ0FFM0U7Z0JBQUEsQ0FBQyxJQUFJLENBQ0g7O2dCQUNGLEVBQUUsSUFBSSxDQUNSO2NBQUEsRUFBRSxJQUFJLENBQ1IsQ0FDQTtZQUFBLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUM7d0JBQ25CLENBQUMsU0FBUyxDQUNSLE9BQU8sQ0FBQyxDQUFDLEVBQUMsS0FBSyxFQUFFLG9CQUFvQixFQUFDLENBQUMsQ0FDdkMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUNsQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FFL0I7Z0JBQUEsQ0FBQyxJQUFJLENBQ0g7O2dCQUNGLEVBQUUsSUFBSSxDQUNSO2NBQUEsRUFBRSxTQUFTLENBQ2IsQ0FDRjtVQUFBLEdBQ0YsQ0FDQTtRQUFBLENBQUMsVUFBVSxJQUFJLGlCQUFpQjtnQkFDOUIsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsRUFDNUcsQ0FDRjtNQUFBLEVBQUUsSUFBSSxDQUFDLEVBQ1AsQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUMvRCxDQUFBO1FBRUQsT0FBTyxDQUNMLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUMsS0FBSyxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FDM0c7UUFBQSxDQUFDLFVBQVUsSUFBSSxPQUFPO2dCQUNwQixDQUFDLFNBQVMsQ0FDUixHQUFHLENBQUMsQ0FBQyxjQUFjLFNBQVMsRUFBRSxDQUFDLENBQy9CLFVBQVUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUUzQixDQUNBO1FBQUEsQ0FBQyxVQUFVLElBQUksTUFBTTtnQkFDbkIsQ0FBQyxRQUFRLENBQ1AsR0FBRyxDQUFDLENBQUMsYUFBYSxTQUFTLElBQUksT0FBTyxFQUFFLENBQUMsQ0FDekMsVUFBVSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQ3ZCLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUVyQixDQUNBO1FBQUEsQ0FBQyxVQUFVLElBQUksaUJBQWlCO2dCQUM5QixDQUFDLGtCQUFrQixDQUNqQixHQUFHLENBQUMsQ0FBQyx3QkFBd0IsU0FBUyxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQ3BELFVBQVUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUN2QixPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFFckIsQ0FDQTtRQUFBLENBQUMsVUFBVSxJQUFJLE1BQU07Z0JBQ25CLENBQUMsUUFBUSxDQUNQLEdBQUcsQ0FBQyxDQUFDLGFBQWEsU0FBUyxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQ3pDLFVBQVUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUUzQixDQUNGO01BQUEsRUFBRSxNQUFNLENBQUMsQ0FDVixDQUFBO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixHQUFHLEtBQUssSUFBSSxFQUFFO1FBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztZQUM5QixPQUFNO1FBQ1IsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUE7WUFFNUIsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBQyxDQUFDLENBQUE7UUFDN0QsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixrQkFBa0IsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDekMsQ0FBQztJQUNILENBQUMsQ0FBQTtDQUNGLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7dXNlTWVtb30gZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7UHJlc3NhYmxlLCBTdHlsZVNoZWV0LCBWaWV3fSBmcm9tIFwicmVhY3QtbmF0aXZlXCJcbmltcG9ydCBCYXNlQ29tcG9uZW50IGZyb20gXCIuLi9iYXNlLWNvbXBvbmVudC5qc1wiXG5pbXBvcnQgQ29uZmlnUmVhZGVyIGZyb20gXCIuL2NvbmZpZy1yZWFkZXIuanNcIlxuaW1wb3J0IEVkaXRQYWdlIGZyb20gXCIuL2VkaXQtcGFnZVwiXG5pbXBvcnQgRmxhc2hOb3RpZmljYXRpb25zIGZyb20gXCJmbGFzaC1ub3RpZmljYXRpb25zL2J1aWxkL2ZsYXNoLW5vdGlmaWNhdGlvbnMuanNcIlxuaW1wb3J0IGhhc0VkaXRDb25maWcgZnJvbSBcIi4vaGFzLWVkaXQtY29uZmlnLmpzXCJcbmltcG9ydCBJbmRleFBhZ2UgZnJvbSBcIi4vaW5kZXgtcGFnZVwiXG5pbXBvcnQgTGF5b3V0IGZyb20gXCIuL2xheW91dC9pbmRleFwiXG5pbXBvcnQgTGluayBmcm9tIFwiLi4vbGlua1wiXG5pbXBvcnQgbWVtbyBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvYnVpbGQvbWVtby5qc1wiXG4vLyBAdHMtZXhwZWN0LWVycm9yXG5pbXBvcnQgKiBhcyBtb2RlbHMgZnJvbSBcIm1vZGVscy5qc1wiXG5pbXBvcnQgUGFyYW1zIGZyb20gXCIuLi9wYXJhbXMuanNcIlxuaW1wb3J0IHtzaGFwZUNvbXBvbmVudH0gZnJvbSBcInNldC1zdGF0ZS1jb21wYXJlL2J1aWxkL3NoYXBlLWNvbXBvbmVudC5qc1wiXG5pbXBvcnQgU2hvd1BhZ2UgZnJvbSBcIi4vc2hvdy1wYWdlL2luZGV4XCJcbmltcG9ydCBTaG93UmVmbGVjdGlvbkFjdGlvbnMgZnJvbSBcIi4vc2hvdy1yZWZsZWN0aW9uLWFjdGlvbnNcIlxuaW1wb3J0IFNob3dSZWZsZWN0aW9uUGFnZSBmcm9tIFwiLi9zaG93LXJlZmxlY3Rpb24tcGFnZVwiXG5pbXBvcnQgVGV4dCBmcm9tIFwiLi4vdXRpbHMvdGV4dFwiXG5pbXBvcnQgdXNlQ2FuQ2FuIGZyb20gXCIuLi91c2UtY2FuLWNhbi5qc1wiXG5pbXBvcnQgdXNlQ3VycmVudFVzZXIgZnJvbSBcIi4uL3VzZS1jdXJyZW50LXVzZXIuanNcIlxuaW1wb3J0IHVzZVF1ZXJ5UGFyYW1zIGZyb20gXCJvbi1sb2NhdGlvbi1jaGFuZ2VkL2J1aWxkL3VzZS1xdWVyeS1wYXJhbXMuanNcIlxuaW1wb3J0IHVzZVN0eWxlcyBmcm9tIFwiLi4vdXNlLXN0eWxlcy5qc1wiXG5cbmNvbnN0IHN0eWxlcyA9IFN0eWxlU2hlZXQuY3JlYXRlKHtcbiAgYWN0aW9uc1ZpZXc6IHtcbiAgICBmbGV4RGlyZWN0aW9uOiBcInJvd1wiLFxuICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCJcbiAgfSxcbiAgY3JlYXRlTmV3TW9kZWxMaW5rOiB7XG4gICAgbWFyZ2luTGVmdDogMTAsXG4gICAgbWFyZ2luUmlnaHQ6IDEwXG4gIH0sXG4gIGRlc3Ryb3lNb2RlbExpbms6IHtcbiAgICBtYXJnaW5MZWZ0OiAxMCxcbiAgICBtYXJnaW5SaWdodDogMTBcbiAgfSxcbiAgZWRpdE1vZGVsTGluazoge1xuICAgIG1hcmdpbkxlZnQ6IDEwLFxuICAgIG1hcmdpblJpZ2h0OiAxMFxuICB9XG59KVxuXG5leHBvcnQgZGVmYXVsdCBtZW1vKHNoYXBlQ29tcG9uZW50KGNsYXNzIEFwaU1ha2VyU3VwZXJBZG1pbiBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBzZXR1cCgpIHtcbiAgICB0aGlzLnF1ZXJ5UGFyYW1zID0gdXNlUXVlcnlQYXJhbXMoKVxuXG4gICAgaWYgKHRoaXMucXVlcnlQYXJhbXMubW9kZWwpIHtcbiAgICAgIHRoaXMubW9kZWxDbGFzcyA9IG1vZGVsc1t0aGlzLnF1ZXJ5UGFyYW1zLm1vZGVsXVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1vZGVsQ2xhc3MgPSBudWxsXG4gICAgfVxuXG4gICAgdGhpcy5jb25maWdSZWFkZXIgPSB1c2VNZW1vKCgpID0+IHRoaXMubW9kZWxDbGFzcyAmJiBDb25maWdSZWFkZXIuZm9yTW9kZWwodGhpcy5tb2RlbENsYXNzKSwgW3RoaXMubW9kZWxDbGFzc10pXG4gICAgdGhpcy5tb2RlbElkID0gdGhpcy5xdWVyeVBhcmFtcy5tb2RlbF9pZFxuICAgIHRoaXMubW9kZWxOYW1lID0gdGhpcy5tb2RlbENsYXNzPy5tb2RlbENsYXNzRGF0YSgpPy5uYW1lXG4gICAgdGhpcy5jdXJyZW50VXNlciA9IHVzZUN1cnJlbnRVc2VyKClcblxuICAgIHRoaXMuY2FuQ2FuID0gdXNlQ2FuQ2FuKFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCBhYmlsaXRpZXMgPSBbXVxuXG4gICAgICAgIGlmICh0aGlzLm1vZGVsQ2xhc3MpIGFiaWxpdGllcy5wdXNoKFt0aGlzLm1vZGVsQ2xhc3MsIFtcIm5ld1wiXV0pXG5cbiAgICAgICAgcmV0dXJuIGFiaWxpdGllc1xuICAgICAgfSxcbiAgICAgIFt0aGlzLmN1cnJlbnRVc2VyPy5pZCgpLCB0aGlzLm1vZGVsQ2xhc3NdXG4gICAgKVxuXG4gICAgdGhpcy51c2VTdGF0ZXMoe1xuICAgICAgbW9kZWw6IHVuZGVmaW5lZFxuICAgIH0pXG4gICAgdXNlTWVtbyhcbiAgICAgICgpID0+IHsgdGhpcy5sb2FkTW9kZWwoKSB9LFxuICAgICAgW3RoaXMubW9kZWxJZF1cbiAgICApXG4gIH1cblxuICBsb2FkTW9kZWwgPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qge2NvbmZpZ1JlYWRlciwgbW9kZWxDbGFzcywgbW9kZWxJZCwgbW9kZWxOYW1lfSA9IHRoaXMudHRcblxuICAgIGlmIChtb2RlbElkICYmIG1vZGVsQ2xhc3MpIHtcbiAgICAgIGNvbnN0IGFiaWxpdGllcyA9IHt9XG4gICAgICBjb25zdCBhYmlsaXRpZXNGb3JNb2RlbCA9IFtcImRlc3Ryb3lcIiwgXCJlZGl0XCJdXG4gICAgICBjb25zdCBsYXlvdXRTZWxlY3QgPSBjb25maWdSZWFkZXI/Lm1vZGVsQ29uZmlnPy5sYXlvdXQ/LnNlbGVjdFxuXG4gICAgICBhYmlsaXRpZXNbbW9kZWxOYW1lXSA9IGFiaWxpdGllc0Zvck1vZGVsXG5cbiAgICAgIGNvbnN0IHF1ZXJ5ID0gYXdhaXQgbW9kZWxDbGFzc1xuICAgICAgICAucmFuc2Fjayh7aWRfZXE6IG1vZGVsSWR9KVxuICAgICAgICAuYWJpbGl0aWVzKGFiaWxpdGllcylcblxuICAgICAgaWYgKGxheW91dFNlbGVjdCkgcXVlcnkuc2VsZWN0KGxheW91dFNlbGVjdClcblxuICAgICAgY29uc3QgbW9kZWwgPSBhd2FpdCBxdWVyeS5maXJzdCgpXG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoe21vZGVsfSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7bW9kZWw6IHVuZGVmaW5lZH0pXG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtjYW5DYW4sIGNvbmZpZ1JlYWRlciwgbW9kZWxDbGFzcywgbW9kZWxJZCwgbW9kZWxOYW1lLCBxdWVyeVBhcmFtc30gPSB0aGlzLnR0XG4gICAgY29uc3Qge21vZGVsfSA9IHRoaXMuc1xuICAgIGNvbnN0IG1vZGVsQ29uZmlnQWN0aW9ucyA9IGNvbmZpZ1JlYWRlcj8ubW9kZWxDb25maWc/LmFjdGlvbnNcbiAgICBsZXQgcGFnZVRvU2hvd1xuXG4gICAgaWYgKHF1ZXJ5UGFyYW1zLm1vZGVsICYmIHF1ZXJ5UGFyYW1zLm1vZGVsX2lkICYmIHF1ZXJ5UGFyYW1zLm1vZGVsX3JlZmxlY3Rpb24pIHtcbiAgICAgIHBhZ2VUb1Nob3cgPSBcInNob3dfcmVmbGVjdGlvblwiXG4gICAgfSBlbHNlIGlmIChxdWVyeVBhcmFtcy5tb2RlbCAmJiBxdWVyeVBhcmFtcy5tb2RlbF9pZCAmJiBxdWVyeVBhcmFtcy5tb2RlID09IFwiZWRpdFwiKSB7XG4gICAgICBwYWdlVG9TaG93ID0gXCJlZGl0XCJcbiAgICB9IGVsc2UgaWYgKHF1ZXJ5UGFyYW1zLm1vZGVsICYmIHF1ZXJ5UGFyYW1zLm1vZGVsX2lkKSB7XG4gICAgICBwYWdlVG9TaG93ID0gXCJzaG93XCJcbiAgICB9IGVsc2UgaWYgKHF1ZXJ5UGFyYW1zLm1vZGVsICYmIHF1ZXJ5UGFyYW1zLm1vZGUgPT0gXCJuZXdcIikge1xuICAgICAgcGFnZVRvU2hvdyA9IFwiZWRpdFwiXG4gICAgfSBlbHNlIGlmIChxdWVyeVBhcmFtcy5tb2RlbCkge1xuICAgICAgcGFnZVRvU2hvdyA9IFwiaW5kZXhcIlxuICAgIH0gZWxzZSB7XG4gICAgICBwYWdlVG9TaG93ID0gXCJ3ZWxjb21lXCJcbiAgICB9XG5cbiAgICBjb25zdCBhY3Rpb25zVmlld1N0eWxlID0gdXNlU3R5bGVzKHN0eWxlcywgXCJhY3Rpb25zVmlld1wiKVxuXG4gICAgY29uc3QgYWN0aW9ucyA9IHVzZU1lbW8oXG4gICAgICAoKSA9PiA8VmlldyBzdHlsZT17YWN0aW9uc1ZpZXdTdHlsZX0+XG4gICAgICAgIHttb2RlbCAmJiBtb2RlbENvbmZpZ0FjdGlvbnMgJiYgbW9kZWxDb25maWdBY3Rpb25zKHttb2RlbH0pfVxuICAgICAgICB7bW9kZWxDbGFzcyAmJiBwYWdlVG9TaG93ID09IFwiaW5kZXhcIiAmJlxuICAgICAgICAgIDw+XG4gICAgICAgICAgICB7Y2FuQ2FuPy5jYW4oXCJuZXdcIiwgbW9kZWxDbGFzcykgJiYgaGFzRWRpdENvbmZpZyhtb2RlbENsYXNzKSAmJlxuICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgIGRhdGFTZXQ9e3tjbGFzczogXCJjcmVhdGUtbmV3LW1vZGVsLWxpbmtcIn19XG4gICAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5jcmVhdGVOZXdNb2RlbExpbmt9XG4gICAgICAgICAgICAgICAgdG89e1BhcmFtcy53aXRoUGFyYW1zKHttb2RlbDogbW9kZWxOYW1lLCBtb2RlOiBcIm5ld1wifSl9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgICAgIENyZWF0ZSBuZXdcbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8Lz5cbiAgICAgICAgfVxuICAgICAgICB7bW9kZWwgJiYgcGFnZVRvU2hvdyA9PSBcInNob3dcIiAmJlxuICAgICAgICAgIDw+XG4gICAgICAgICAgICB7bW9kZWwuY2FuKFwiZWRpdFwiKSAmJiBoYXNFZGl0Q29uZmlnKG1vZGVsQ2xhc3MpICYmXG4gICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgZGF0YVNldD17e2NsYXNzOiBcImVkaXQtbW9kZWwtbGlua1wifX1cbiAgICAgICAgICAgICAgICBzdHlsZT17c3R5bGVzLmVkaXRNb2RlbExpbmt9XG4gICAgICAgICAgICAgICAgdG89e1BhcmFtcy53aXRoUGFyYW1zKHttb2RlbDogbW9kZWxOYW1lLCBtb2RlbF9pZDogbW9kZWxJZCwgbW9kZTogXCJlZGl0XCJ9KX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICAgICAgRWRpdFxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAge21vZGVsLmNhbihcImRlc3Ryb3lcIikgJiZcbiAgICAgICAgICAgICAgPFByZXNzYWJsZVxuICAgICAgICAgICAgICAgIGRhdGFTZXQ9e3tjbGFzczogXCJkZXN0cm95LW1vZGVsLWxpbmtcIn19XG4gICAgICAgICAgICAgICAgb25QcmVzcz17dGhpcy50dC5vbkRlc3Ryb3lDbGlja2VkfVxuICAgICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMuZGVzdHJveU1vZGVsTGlua31cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICAgICAgRGVsZXRlXG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICA8L1ByZXNzYWJsZT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8Lz5cbiAgICAgICAgfVxuICAgICAgICB7cGFnZVRvU2hvdyA9PSBcInNob3dfcmVmbGVjdGlvblwiICYmXG4gICAgICAgICAgPFNob3dSZWZsZWN0aW9uQWN0aW9ucyBtb2RlbD17bW9kZWx9IG1vZGVsQ2xhc3M9e21vZGVsQ2xhc3N9IHJlZmxlY3Rpb25OYW1lPXtxdWVyeVBhcmFtcy5tb2RlbF9yZWZsZWN0aW9ufSAvPlxuICAgICAgICB9XG4gICAgICA8L1ZpZXc+LFxuICAgICAgW2NhbkNhbiwgY29uZmlnUmVhZGVyPy5hY3Rpb25zLCBtb2RlbCwgbW9kZWxDbGFzcywgcGFnZVRvU2hvd11cbiAgICApXG5cbiAgICByZXR1cm4gKFxuICAgICAgPExheW91dCBhY3Rpb25zPXthY3Rpb25zfSBhY3RpdmU9e3F1ZXJ5UGFyYW1zLm1vZGVsfSBoZWFkZXJUaXRsZT17bW9kZWxDbGFzcz8ubW9kZWxOYW1lKCk/Lmh1bWFuKHtjb3VudDogMn0pfT5cbiAgICAgICAge3BhZ2VUb1Nob3cgPT0gXCJpbmRleFwiICYmXG4gICAgICAgICAgPEluZGV4UGFnZVxuICAgICAgICAgICAga2V5PXtgaW5kZXgtcGFnZS0ke21vZGVsTmFtZX1gfVxuICAgICAgICAgICAgbW9kZWxDbGFzcz17bW9kZWxDbGFzc31cbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICAgIHtwYWdlVG9TaG93ID09IFwic2hvd1wiICYmXG4gICAgICAgICAgPFNob3dQYWdlXG4gICAgICAgICAgICBrZXk9e2BzaG93LXBhZ2UtJHttb2RlbE5hbWV9LSR7bW9kZWxJZH1gfVxuICAgICAgICAgICAgbW9kZWxDbGFzcz17bW9kZWxDbGFzc31cbiAgICAgICAgICAgIG1vZGVsSWQ9e21vZGVsSWR9XG4gICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgICAgICB7cGFnZVRvU2hvdyA9PSBcInNob3dfcmVmbGVjdGlvblwiICYmXG4gICAgICAgICAgPFNob3dSZWZsZWN0aW9uUGFnZVxuICAgICAgICAgICAga2V5PXtgc2hvdy1yZWZsZWN0aW9uLXBhZ2UtJHttb2RlbE5hbWV9LSR7bW9kZWxJZH1gfVxuICAgICAgICAgICAgbW9kZWxDbGFzcz17bW9kZWxDbGFzc31cbiAgICAgICAgICAgIG1vZGVsSWQ9e21vZGVsSWR9XG4gICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgICAgICB7cGFnZVRvU2hvdyA9PSBcImVkaXRcIiAmJlxuICAgICAgICAgIDxFZGl0UGFnZVxuICAgICAgICAgICAga2V5PXtgZWRpdC1wYWdlLSR7bW9kZWxOYW1lfS0ke21vZGVsSWR9YH1cbiAgICAgICAgICAgIG1vZGVsQ2xhc3M9e21vZGVsQ2xhc3N9XG4gICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgICAgPC9MYXlvdXQ+XG4gICAgKVxuICB9XG5cbiAgb25EZXN0cm95Q2xpY2tlZCA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWNvbmZpcm0oXCJBcmUgeW91IHN1cmU/XCIpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5zLm1vZGVsLmRlc3Ryb3koKVxuXG4gICAgICBQYXJhbXMuY2hhbmdlUGFyYW1zKHttb2RlOiB1bmRlZmluZWQsIG1vZGVsX2lkOiB1bmRlZmluZWR9KVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBGbGFzaE5vdGlmaWNhdGlvbnMuZXJyb3JSZXNwb25zZShlcnJvcilcbiAgICB9XG4gIH1cbn0pKVxuIl19
|
|
@@ -1,4 +1,28 @@
|
|
|
1
|
-
export function useHeaderActionButtonStyle():
|
|
1
|
+
export function useHeaderActionButtonStyle(): ({ stackedIndex }?: {
|
|
2
|
+
stackedIndex?: number;
|
|
3
|
+
}) => {
|
|
4
|
+
alignSelf: string;
|
|
5
|
+
paddingVertical: number;
|
|
6
|
+
paddingHorizontal: number;
|
|
7
|
+
borderWidth: number;
|
|
8
|
+
borderColor: string;
|
|
9
|
+
marginRight: number;
|
|
10
|
+
marginBottom: number;
|
|
11
|
+
borderRadius: number;
|
|
12
|
+
fontSize: number;
|
|
13
|
+
padding?: undefined;
|
|
14
|
+
} | {
|
|
15
|
+
alignSelf: string;
|
|
16
|
+
padding: number;
|
|
17
|
+
paddingVertical?: undefined;
|
|
18
|
+
paddingHorizontal?: undefined;
|
|
19
|
+
borderWidth?: undefined;
|
|
20
|
+
borderColor?: undefined;
|
|
21
|
+
marginRight?: undefined;
|
|
22
|
+
marginBottom?: undefined;
|
|
23
|
+
borderRadius?: undefined;
|
|
24
|
+
fontSize?: undefined;
|
|
25
|
+
};
|
|
2
26
|
declare const _default: any;
|
|
3
27
|
export default _default;
|
|
4
28
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"/src/","sources":["super-admin/layout/header/index.jsx"],"names":[],"mappings":"AAaO;;;;;;;;;;;;;;;;;;;;;;;;EA4BN"}
|
|
@@ -1,59 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
|
-
var _a;
|
|
39
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
-
exports.useHeaderActionButtonStyle = void 0;
|
|
41
|
-
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
42
|
-
const react_1 = __importStar(require("react"));
|
|
43
|
-
const base_component_js_1 = __importDefault(require("../../../base-component.js"));
|
|
44
|
-
const icon_1 = __importDefault(require("../../../utils/icon"));
|
|
45
|
-
const memo_js_1 = __importDefault(require("set-state-compare/build/memo.js"));
|
|
46
|
-
const prop_types_1 = __importDefault(require("prop-types"));
|
|
47
|
-
const prop_types_exact_1 = __importDefault(require("prop-types-exact"));
|
|
48
|
-
const shape_component_js_1 = require("set-state-compare/build/shape-component.js");
|
|
49
|
-
const text_1 = __importDefault(require("../../../utils/text"));
|
|
50
|
-
const react_native_1 = require("react-native");
|
|
51
|
-
const use_breakpoint_js_1 = __importDefault(require("../../../use-breakpoint.js"));
|
|
52
|
-
const use_event_listener_js_1 = __importDefault(require("../../../use-event-listener.js"));
|
|
1
|
+
import React, { useCallback, useRef } from "react";
|
|
2
|
+
import BaseComponent from "../../../base-component.js";
|
|
3
|
+
import Icon from "../../../utils/icon";
|
|
4
|
+
import memo from "set-state-compare/build/memo.js";
|
|
5
|
+
import PropTypes from "prop-types";
|
|
6
|
+
import PropTypesExact from "prop-types-exact";
|
|
7
|
+
import { shapeComponent } from "set-state-compare/build/shape-component.js";
|
|
8
|
+
import Text from "../../../utils/text";
|
|
9
|
+
import { Pressable, View } from "react-native";
|
|
10
|
+
import useBreakpoint from "../../../use-breakpoint.js";
|
|
11
|
+
import useEventListener from "../../../use-event-listener.js";
|
|
53
12
|
// Hook for consistent action button styling across breakpoints
|
|
54
|
-
const useHeaderActionButtonStyle = () => {
|
|
55
|
-
const { mdUp } = (
|
|
56
|
-
return
|
|
13
|
+
export const useHeaderActionButtonStyle = () => {
|
|
14
|
+
const { mdUp } = useBreakpoint();
|
|
15
|
+
return useCallback(({ stackedIndex = 0 } = {}) => {
|
|
57
16
|
const base = mdUp
|
|
58
17
|
? {
|
|
59
18
|
alignSelf: "flex-start",
|
|
@@ -77,94 +36,109 @@ const useHeaderActionButtonStyle = () => {
|
|
|
77
36
|
return base;
|
|
78
37
|
}, [mdUp]);
|
|
79
38
|
};
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
39
|
+
export default memo(shapeComponent(class ApiMakerSuperAdminLayoutHeader extends BaseComponent {
|
|
40
|
+
static propTypes = PropTypesExact({
|
|
41
|
+
actions: PropTypes.any,
|
|
42
|
+
onTriggerMenu: PropTypes.func.isRequired,
|
|
43
|
+
title: PropTypes.string
|
|
44
|
+
});
|
|
45
|
+
setup() {
|
|
46
|
+
const { name: breakpoint, mdUp } = useBreakpoint();
|
|
47
|
+
this.headerActionsRef = useRef();
|
|
48
|
+
this.setInstance({ breakpoint, mdUp });
|
|
49
|
+
this.useStates({
|
|
50
|
+
headerActionsActive: false
|
|
51
|
+
});
|
|
52
|
+
useEventListener(window, "mouseup", this.tt.onWindowMouseUp);
|
|
53
|
+
}
|
|
54
|
+
render() {
|
|
55
|
+
const { breakpoint, mdUp } = this.tt;
|
|
56
|
+
const { actions, onTriggerMenu, title } = this.props;
|
|
57
|
+
const headerStyle = {
|
|
58
|
+
display: "flex",
|
|
59
|
+
flexDirection: "row",
|
|
60
|
+
alignItems: "center",
|
|
61
|
+
zIndex: 9,
|
|
62
|
+
height: 100,
|
|
63
|
+
paddingRight: 30,
|
|
64
|
+
paddingLeft: 30,
|
|
65
|
+
backgroundColor: "#fff"
|
|
66
|
+
};
|
|
67
|
+
const headerActionsContainerStyle = {};
|
|
68
|
+
const headerActionsStyle = {
|
|
69
|
+
flexDirection: mdUp ? "row" : "column",
|
|
70
|
+
alignItems: mdUp ? "flex-start" : "stretch",
|
|
71
|
+
gap: mdUp ? 8 : 0
|
|
72
|
+
};
|
|
73
|
+
if (breakpoint == "xs" || breakpoint == "sm") {
|
|
74
|
+
headerStyle.position = "absolute";
|
|
75
|
+
headerStyle.width = "100%";
|
|
76
|
+
Object.assign(headerActionsContainerStyle, {
|
|
77
|
+
position: "fixed",
|
|
78
|
+
top: 0,
|
|
79
|
+
left: 0,
|
|
105
80
|
display: "flex",
|
|
106
|
-
|
|
81
|
+
width: "100vw",
|
|
82
|
+
height: "100vh",
|
|
107
83
|
alignItems: "center",
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
};
|
|
114
|
-
const headerActionsContainerStyle = {};
|
|
115
|
-
const headerActionsStyle = {
|
|
116
|
-
flexDirection: mdUp ? "row" : "column",
|
|
117
|
-
alignItems: mdUp ? "flex-start" : "stretch",
|
|
118
|
-
gap: mdUp ? 8 : 0
|
|
119
|
-
};
|
|
120
|
-
if (breakpoint == "xs" || breakpoint == "sm") {
|
|
121
|
-
headerStyle.position = "absolute";
|
|
122
|
-
headerStyle.width = "100%";
|
|
123
|
-
Object.assign(headerActionsContainerStyle, {
|
|
124
|
-
position: "fixed",
|
|
125
|
-
top: 0,
|
|
126
|
-
left: 0,
|
|
127
|
-
display: "flex",
|
|
128
|
-
width: "100vw",
|
|
129
|
-
height: "100vh",
|
|
130
|
-
alignItems: "center",
|
|
131
|
-
justifyContent: "center",
|
|
132
|
-
backgroundColor: "rgba(0, 0, 0, 0.8)"
|
|
133
|
-
});
|
|
134
|
-
if (!this.s.headerActionsActive) {
|
|
135
|
-
headerActionsContainerStyle.display = "none";
|
|
136
|
-
}
|
|
137
|
-
Object.assign(headerActionsStyle, {
|
|
138
|
-
minWidth: "80vw",
|
|
139
|
-
maxWidth: "100vw",
|
|
140
|
-
backgroundColor: "#fff"
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
else if (breakpoint == "md") {
|
|
144
|
-
headerStyle.position = "fixed";
|
|
145
|
-
headerStyle.left = 250;
|
|
146
|
-
headerStyle.width = "calc(100% - 250px)";
|
|
147
|
-
}
|
|
148
|
-
else if (breakpoint == "lg" || breakpoint == "xl" || breakpoint == "xxl") {
|
|
149
|
-
headerStyle.position = "fixed";
|
|
150
|
-
headerStyle.left = 290;
|
|
151
|
-
headerStyle.width = "calc(100% - 290px)";
|
|
152
|
-
}
|
|
153
|
-
if (breakpoint == "md" || breakpoint == "lg" || breakpoint == "xl" || breakpoint == "xxl") {
|
|
154
|
-
headerActionsContainerStyle.marginLeft = "auto";
|
|
84
|
+
justifyContent: "center",
|
|
85
|
+
backgroundColor: "rgba(0, 0, 0, 0.8)"
|
|
86
|
+
});
|
|
87
|
+
if (!this.s.headerActionsActive) {
|
|
88
|
+
headerActionsContainerStyle.display = "none";
|
|
155
89
|
}
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
}), children: [actions &&
|
|
162
|
-
(0, jsx_runtime_1.jsx)(react_native_1.Pressable, { dataSet: this.cache("actionsLinkDataSet", { class: "actions-link" }), onPress: this.tt.onGearsClicked, style: this.cache("actionsLinkStyle", { marginRight: 8, fontSize: 22 }), children: (0, jsx_runtime_1.jsx)(icon_1.default, { name: "gear", size: 20 }) }), (0, jsx_runtime_1.jsx)(react_native_1.Pressable, { dataSet: this.cache("burgerMenuLinkDataSet", { class: "burger-menu-link" }), onPress: onTriggerMenu, children: (0, jsx_runtime_1.jsx)(icon_1.default, { name: "bars", size: 20 }) })] })] }));
|
|
90
|
+
Object.assign(headerActionsStyle, {
|
|
91
|
+
minWidth: "80vw",
|
|
92
|
+
maxWidth: "100vw",
|
|
93
|
+
backgroundColor: "#fff"
|
|
94
|
+
});
|
|
163
95
|
}
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
96
|
+
else if (breakpoint == "md") {
|
|
97
|
+
headerStyle.position = "fixed";
|
|
98
|
+
headerStyle.left = 250;
|
|
99
|
+
headerStyle.width = "calc(100% - 250px)";
|
|
100
|
+
}
|
|
101
|
+
else if (breakpoint == "lg" || breakpoint == "xl" || breakpoint == "xxl") {
|
|
102
|
+
headerStyle.position = "fixed";
|
|
103
|
+
headerStyle.left = 290;
|
|
104
|
+
headerStyle.width = "calc(100% - 290px)";
|
|
105
|
+
}
|
|
106
|
+
if (breakpoint == "md" || breakpoint == "lg" || breakpoint == "xl" || breakpoint == "xxl") {
|
|
107
|
+
headerActionsContainerStyle.marginLeft = "auto";
|
|
108
|
+
}
|
|
109
|
+
return (<View dataSet={this.cache("rootViewDataSet", { component: "super-admin--layout--header" })} style={headerStyle}>
|
|
110
|
+
<View dataSet={this.cache("headerTitleViewDataSet", { class: "header-title-container" })}>
|
|
111
|
+
<Text style={this.cache("headerTitleTextStyle", { color: "#282a33", fontSize: 22 })}>
|
|
112
|
+
{title}
|
|
113
|
+
</Text>
|
|
114
|
+
</View>
|
|
115
|
+
{actions &&
|
|
116
|
+
<View dataSet={{ active: this.s.headerActionsActive, class: "header-actions-container" }} style={headerActionsContainerStyle}>
|
|
117
|
+
<View dataSet={this.cache("headerActionsViewDataSet", { class: "header-actions" })} ref={this.tt.headerActionsRef} style={headerActionsStyle}>
|
|
118
|
+
{actions}
|
|
119
|
+
</View>
|
|
120
|
+
</View>}
|
|
121
|
+
{!mdUp &&
|
|
122
|
+
<View dataSet={this.cache("burgerMenuContainerDataSet", { class: "burger-menu-container" })} style={this.cache("burgerMenuContainerStyle", {
|
|
123
|
+
flexDirection: "row",
|
|
124
|
+
marginLeft: "auto"
|
|
125
|
+
})}>
|
|
126
|
+
{actions &&
|
|
127
|
+
<Pressable dataSet={this.cache("actionsLinkDataSet", { class: "actions-link" })} onPress={this.tt.onGearsClicked} style={this.cache("actionsLinkStyle", { marginRight: 8, fontSize: 22 })}>
|
|
128
|
+
<Icon name="gear" size={20}/>
|
|
129
|
+
</Pressable>}
|
|
130
|
+
<Pressable dataSet={this.cache("burgerMenuLinkDataSet", { class: "burger-menu-link" })} onPress={onTriggerMenu}>
|
|
131
|
+
<Icon name="bars" size={20}/>
|
|
132
|
+
</Pressable>
|
|
133
|
+
</View>}
|
|
134
|
+
</View>);
|
|
135
|
+
}
|
|
136
|
+
onGearsClicked = () => this.setState({ headerActionsActive: !this.s.headerActionsActive });
|
|
137
|
+
onWindowMouseUp = (e) => {
|
|
138
|
+
// Close the header actions menu if clicked happened outside
|
|
139
|
+
if (this.s.headerActionsActive && this.tt.headerActionsRef.current && !this.tt.headerActionsRef.current.contains(e.target)) {
|
|
140
|
+
this.setState({ headerActionsActive: false });
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
}));
|
|
144
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbInN1cGVyLWFkbWluL2xheW91dC9oZWFkZXIvaW5kZXguanN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLEVBQUMsV0FBVyxFQUFFLE1BQU0sRUFBQyxNQUFNLE9BQU8sQ0FBQTtBQUNoRCxPQUFPLGFBQWEsTUFBTSw0QkFBNEIsQ0FBQTtBQUN0RCxPQUFPLElBQUksTUFBTSxxQkFBcUIsQ0FBQTtBQUN0QyxPQUFPLElBQUksTUFBTSxpQ0FBaUMsQ0FBQTtBQUNsRCxPQUFPLFNBQVMsTUFBTSxZQUFZLENBQUE7QUFDbEMsT0FBTyxjQUFjLE1BQU0sa0JBQWtCLENBQUE7QUFDN0MsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDRDQUE0QyxDQUFBO0FBQ3pFLE9BQU8sSUFBSSxNQUFNLHFCQUFxQixDQUFBO0FBQ3RDLE9BQU8sRUFBQyxTQUFTLEVBQUUsSUFBSSxFQUFDLE1BQU0sY0FBYyxDQUFBO0FBQzVDLE9BQU8sYUFBYSxNQUFNLDRCQUE0QixDQUFBO0FBQ3RELE9BQU8sZ0JBQWdCLE1BQU0sZ0NBQWdDLENBQUE7QUFFN0QsK0RBQStEO0FBQy9ELE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLEdBQUcsRUFBRTtJQUM3QyxNQUFNLEVBQUMsSUFBSSxFQUFDLEdBQUcsYUFBYSxFQUFFLENBQUE7SUFFOUIsT0FBTyxXQUFXLENBQUMsQ0FBQyxFQUFDLFlBQVksR0FBRyxDQUFDLEVBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRTtRQUM3QyxNQUFNLElBQUksR0FBRyxJQUFJO1lBQ2YsQ0FBQyxDQUFDO2dCQUNFLFNBQVMsRUFBRSxZQUFZO2dCQUN2QixlQUFlLEVBQUUsQ0FBQztnQkFDbEIsaUJBQWlCLEVBQUUsRUFBRTtnQkFDckIsV0FBVyxFQUFFLENBQUM7Z0JBQ2QsV0FBVyxFQUFFLFNBQVM7Z0JBQ3RCLFdBQVcsRUFBRSxDQUFDO2dCQUNkLFlBQVks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dEIsNERBQTREO1FBQzVELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMzSCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUMsbUJBQW1CLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQTtRQUM3QyxDQUFDO0lBQ0gsQ0FBQyxDQUFBO0NBQ0YsQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHt1c2VDYWxsYmFjaywgdXNlUmVmfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSBcIi4uLy4uLy4uL2Jhc2UtY29tcG9uZW50LmpzXCJcbmltcG9ydCBJY29uIGZyb20gXCIuLi8uLi8uLi91dGlscy9pY29uXCJcbmltcG9ydCBtZW1vIGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9idWlsZC9tZW1vLmpzXCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IFByb3BUeXBlc0V4YWN0IGZyb20gXCJwcm9wLXR5cGVzLWV4YWN0XCJcbmltcG9ydCB7c2hhcGVDb21wb25lbnR9IGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9idWlsZC9zaGFwZS1jb21wb25lbnQuanNcIlxuaW1wb3J0IFRleHQgZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3RleHRcIlxuaW1wb3J0IHtQcmVzc2FibGUsIFZpZXd9IGZyb20gXCJyZWFjdC1uYXRpdmVcIlxuaW1wb3J0IHVzZUJyZWFrcG9pbnQgZnJvbSBcIi4uLy4uLy4uL3VzZS1icmVha3BvaW50LmpzXCJcbmltcG9ydCB1c2VFdmVudExpc3RlbmVyIGZyb20gXCIuLi8uLi8uLi91c2UtZXZlbnQtbGlzdGVuZXIuanNcIlxuXG4vLyBIb29rIGZvciBjb25zaXN0ZW50IGFjdGlvbiBidXR0b24gc3R5bGluZyBhY3Jvc3MgYnJlYWtwb2ludHNcbmV4cG9ydCBjb25zdCB1c2VIZWFkZXJBY3Rpb25CdXR0b25TdHlsZSA9ICgpID0+IHtcbiAgY29uc3Qge21kVXB9ID0gdXNlQnJlYWtwb2ludCgpXG5cbiAgcmV0dXJuIHVzZUNhbGxiYWNrKCh7c3RhY2tlZEluZGV4ID0gMH0gPSB7fSkgPT4ge1xuICAgIGNvbnN0IGJhc2UgPSBtZFVwXG4gICAgICA/IHtcbiAgICAgICAgICBhbGlnblNlbGY6IFwiZmxleC1zdGFydFwiLFxuICAgICAgICAgIHBhZGRpbmdWZXJ0aWNhbDogNyxcbiAgICAgICAgICBwYWRkaW5nSG9yaXpvbnRhbDogMTAsXG4gICAgICAgICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgICAgICAgYm9yZGVyQ29sb3I6IFwiI2NiZDVlMVwiLFxuICAgICAgICAgIG1hcmdpblJpZ2h0OiA0LFxuICAgICAgICAgIG1hcmdpbkJvdHRvbTogNCxcbiAgICAgICAgICBib3JkZXJSYWRpdXM6IDUsXG4gICAgICAgICAgZm9udFNpemU6IDEzXG4gICAgICAgIH1cbiAgICAgIDoge1xuICAgICAgICAgIGFsaWduU2VsZjogXCJzdHJldGNoXCIsXG4gICAgICAgICAgcGFkZGluZzogMTFcbiAgICAgICAgfVxuXG4gICAgaWYgKCFtZFVwICYmIHN0YWNrZWRJbmRleCA+IDApIHtcbiAgICAgIGJhc2UuYm9yZGVyVG9wV2lkdGggPSAxXG4gICAgICBiYXNlLmJvcmRlclRvcENvbG9yID0gXCIjYzljOWM5XCJcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVxuICB9LCBbbWRVcF0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IG1lbW8oc2hhcGVDb21wb25lbnQoY2xhc3MgQXBpTWFrZXJTdXBlckFkbWluTGF5b3V0SGVhZGVyIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSBQcm9wVHlwZXNFeGFjdCh7XG4gICAgYWN0aW9uczogUHJvcFR5cGVzLmFueSxcbiAgICBvblRyaWdnZXJNZW51OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHRpdGxlOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pXG5cbiAgc2V0dXAoKSB7XG4gICAgY29uc3Qge25hbWU6IGJyZWFrcG9pbnQsIG1kVXB9ID0gdXNlQnJlYWtwb2ludCgpXG5cbiAgICB0aGlzLmhlYWRlckFjdGlvbnNSZWYgPSB1c2VSZWYoKVxuICAgIHRoaXMuc2V0SW5zdGFuY2Uoe2JyZWFrcG9pbnQsIG1kVXB9KVxuICAgIHRoaXMudXNlU3RhdGVzKHtcbiAgICAgIGhlYWRlckFjdGlvbnNBY3RpdmU6IGZhbHNlXG4gICAgfSlcblxuICAgIHVzZUV2ZW50TGlzdGVuZXIod2luZG93LCBcIm1vdXNldXBcIiwgdGhpcy50dC5vbldpbmRvd01vdXNlVXApXG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge2JyZWFrcG9pbnQsIG1kVXB9ID0gdGhpcy50dFxuICAgIGNvbnN0IHthY3Rpb25zLCBvblRyaWdnZXJNZW51LCB0aXRsZX0gPSB0aGlzLnByb3BzXG5cbiAgICBjb25zdCBoZWFkZXJTdHlsZSA9IHtcbiAgICAgIGRpc3BsYXk6IFwiZmxleFwiLFxuICAgICAgZmxleERpcmVjdGlvbjogXCJyb3dcIixcbiAgICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICB6SW5kZXg6IDksXG4gICAgICBoZWlnaHQ6IDEwMCxcbiAgICAgIHBhZGRpbmdSaWdodDogMzAsXG4gICAgICBwYWRkaW5nTGVmdDogMzAsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwiI2ZmZlwiXG4gICAgfVxuXG4gICAgY29uc3QgaGVhZGVyQWN0aW9uc0NvbnRhaW5lclN0eWxlID0ge31cbiAgICBjb25zdCBoZWFkZXJBY3Rpb25zU3R5bGUgPSB7XG4gICAgICBmbGV4RGlyZWN0aW9uOiBtZFVwID8gXCJyb3dcIiA6IFwiY29sdW1uXCIsXG4gICAgICBhbGlnbkl0ZW1zOiBtZFVwID8gXCJmbGV4LXN0YXJ0XCIgOiBcInN0cmV0Y2hcIixcbiAgICAgIGdhcDogbWRVcCA/IDggOiAwXG4gICAgfVxuXG4gICAgaWYgKGJyZWFrcG9pbnQgPT0gXCJ4c1wiIHx8IGJyZWFrcG9pbnQgPT0gXCJzbVwiKSB7XG4gICAgICBoZWFkZXJTdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIlxuICAgICAgaGVhZGVyU3R5bGUud2lkdGggPSBcIjEwMCVcIlxuXG4gICAgICBPYmplY3QuYXNzaWduKGhlYWRlckFjdGlvbnNDb250YWluZXJTdHlsZSwge1xuICAgICAgICBwb3NpdGlvbjogXCJmaXhlZFwiLFxuICAgICAgICB0b3A6IDAsXG4gICAgICAgIGxlZnQ6IDAsXG5cbiAgICAgICAgZGlzcGxheTogXCJmbGV4XCIsXG4gICAgICAgIHdpZHRoOiBcIjEwMHZ3XCIsXG4gICAgICAgIGhlaWdodDogXCIxMDB2aFwiLFxuICAgICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIixcblxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwicmdiYSgwLCAwLCAwLCAwLjgpXCJcbiAgICAgIH0pXG5cbiAgICAgIGlmICghdGhpcy5zLmhlYWRlckFjdGlvbnNBY3RpdmUpIHtcbiAgICAgICAgaGVhZGVyQWN0aW9uc0NvbnRhaW5lclN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIlxuICAgICAgfVxuXG4gICAgICBPYmplY3QuYXNzaWduKGhlYWRlckFjdGlvbnNTdHlsZSwge1xuICAgICAgICBtaW5XaWR0aDogXCI4MHZ3XCIsXG4gICAgICAgIG1heFdpZHRoOiBcIjEwMHZ3XCIsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjZmZmXCJcbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmIChicmVha3BvaW50ID09IFwibWRcIikge1xuICAgICAgaGVhZGVyU3R5bGUucG9zaXRpb24gPSBcImZpeGVkXCJcbiAgICAgIGhlYWRlclN0eWxlLmxlZnQgPSAyNTBcbiAgICAgIGhlYWRlclN0eWxlLndpZHRoID0gXCJjYWxjKDEwMCUgLSAyNTBweClcIlxuICAgIH0gZWxzZSBpZiAoYnJlYWtwb2ludCA9PSBcImxnXCIgfHwgYnJlYWtwb2ludCA9PSBcInhsXCIgfHwgYnJlYWtwb2ludCA9PSBcInh4bFwiKSB7XG4gICAgICBoZWFkZXJTdHlsZS5wb3NpdGlvbiA9IFwiZml4ZWRcIlxuICAgICAgaGVhZGVyU3R5bGUubGVmdCA9IDI5MFxuICAgICAgaGVhZGVyU3R5bGUud2lkdGggPSBcImNhbGMoMTAwJSAtIDI5MHB4KVwiXG4gICAgfVxuXG4gICAgaWYgKGJyZWFrcG9pbnQgPT0gXCJtZFwiIHx8IGJyZWFrcG9pbnQgPT0gXCJsZ1wiIHx8IGJyZWFrcG9pbnQgPT0gXCJ4bFwiIHx8IGJyZWFrcG9pbnQgPT0gXCJ4eGxcIikge1xuICAgICAgaGVhZGVyQWN0aW9uc0NvbnRhaW5lclN0eWxlLm1hcmdpbkxlZnQgPSBcImF1dG9cIlxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8VmlldyBkYXRhU2V0PXt0aGlzLmNhY2hlKFwicm9vdFZpZXdEYXRhU2V0XCIsIHtjb21wb25lbnQ6IFwic3VwZXItYWRtaW4tLWxheW91dC0taGVhZGVyXCJ9KX0gc3R5bGU9e2hlYWRlclN0eWxlfT5cbiAgICAgICAgPFZpZXcgZGF0YVNldD17dGhpcy5jYWNoZShcImhlYWRlclRpdGxlVmlld0RhdGFTZXRcIiwge2NsYXNzOiBcImhlYWRlci10aXRsZS1jb250YWluZXJcIn0pfT5cbiAgICAgICAgICA8VGV4dCBzdHlsZT17dGhpcy5jYWNoZShcImhlYWRlclRpdGxlVGV4dFN0eWxlXCIsIHtjb2xvcjogXCIjMjgyYTMzXCIsIGZvbnRTaXplOiAyMn0pfT5cbiAgICAgICAgICAgIHt0aXRsZX1cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICAge2FjdGlvbnMgJiZcbiAgICAgICAgICA8VmlldyBkYXRhU2V0PXt7YWN0aXZlOiB0aGlzLnMuaGVhZGVyQWN0aW9uc0FjdGl2ZSwgY2xhc3M6IFwiaGVhZGVyLWFjdGlvbnMtY29udGFpbmVyXCJ9fSBzdHlsZT17aGVhZGVyQWN0aW9uc0NvbnRhaW5lclN0eWxlfT5cbiAgICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICBkYXRhU2V0PXt0aGlzLmNhY2hlKFwiaGVhZGVyQWN0aW9uc1ZpZXdEYXRhU2V0XCIsIHtjbGFzczogXCJoZWFkZXItYWN0aW9uc1wifSl9XG4gICAgICAgICAgICByZWY9e3RoaXMudHQuaGVhZGVyQWN0aW9uc1JlZn1cbiAgICAgICAgICAgIHN0eWxlPXtoZWFkZXJBY3Rpb25zU3R5bGV9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2FjdGlvbnN9XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgfVxuICAgICAgICB7IW1kVXAgJiZcbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgZGF0YVNldD17dGhpcy5jYWNoZShcImJ1cmdlck1lbnVDb250YWluZXJEYXRhU2V0XCIsIHtjbGFzczogXCJidXJnZXItbWVudS1jb250YWluZXJcIn0pfVxuICAgICAgICAgICAgc3R5bGU9e3RoaXMuY2FjaGUoXCJidXJnZXJNZW51Q29udGFpbmVyU3R5bGVcIiwge1xuICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiBcInJvd1wiLFxuICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiBcImF1dG9cIlxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2FjdGlvbnMgJiZcbiAgICAgICAgICAgICAgPFByZXNzYWJsZVxuICAgICAgICAgICAgICAgIGRhdGFTZXQ9e3RoaXMuY2FjaGUoXCJhY3Rpb25zTGlua0RhdGFTZXRcIiwge2NsYXNzOiBcImFjdGlvbnMtbGlua1wifSl9XG4gICAgICAgICAgICAgICAgb25QcmVzcz17dGhpcy50dC5vbkdlYXJzQ2xpY2tlZH1cbiAgICAgICAgICAgICAgICBzdHlsZT17dGhpcy5jYWNoZShcImFjdGlvbnNMaW5rU3R5bGVcIiwge21hcmdpblJpZ2h0OiA4LCBmb250U2l6ZTogMjJ9KX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJnZWFyXCIgc2l6ZT17MjB9IC8+XG4gICAgICAgICAgICAgIDwvUHJlc3NhYmxlPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPFByZXNzYWJsZSBkYXRhU2V0PXt0aGlzLmNhY2hlKFwiYnVyZ2VyTWVudUxpbmtEYXRhU2V0XCIsIHtjbGFzczogXCJidXJnZXItbWVudS1saW5rXCJ9KX0gb25QcmVzcz17b25UcmlnZ2VyTWVudX0+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJiYXJzXCIgc2l6ZT17MjB9IC8+XG4gICAgICAgICAgICA8L1ByZXNzYWJsZT5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIH1cbiAgICAgIDwvVmlldz5cbiAgICApXG4gIH1cblxuICBvbkdlYXJzQ2xpY2tlZCA9ICgpID0+IHRoaXMuc2V0U3RhdGUoe2hlYWRlckFjdGlvbnNBY3RpdmU6ICF0aGlzLnMuaGVhZGVyQWN0aW9uc0FjdGl2ZX0pXG5cbiAgb25XaW5kb3dNb3VzZVVwID0gKGUpID0+IHtcbiAgICAvLyBDbG9zZSB0aGUgaGVhZGVyIGFjdGlvbnMgbWVudSBpZiBjbGlja2VkIGhhcHBlbmVkIG91dHNpZGVcbiAgICBpZiAodGhpcy5zLmhlYWRlckFjdGlvbnNBY3RpdmUgJiYgdGhpcy50dC5oZWFkZXJBY3Rpb25zUmVmLmN1cnJlbnQgJiYgIXRoaXMudHQuaGVhZGVyQWN0aW9uc1JlZi5jdXJyZW50LmNvbnRhaW5zKGUudGFyZ2V0KSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7aGVhZGVyQWN0aW9uc0FjdGl2ZTogZmFsc2V9KVxuICAgIH1cbiAgfVxufSkpXG4iXX0=
|