From c912277116341ee020518f0d6dea261ffd73e6e2 Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Mon, 27 Jan 2020 20:32:31 +0100 Subject: [PATCH] Queryies in UI (#476) * Queryies in UI * Temp * Separate templates and scss files. * Smaller folders * More files moved. * Restructured * Default imports for css * Add headers * Code simplified * Preparation for Angular 9 * Compile fix. --- .../Frontend/Middlewares/WebpackMiddleware.cs | 1 + frontend/app-config/webpack.config.js | 12 +- frontend/app/app.component.scss | 2 - .../administration-area.component.scss | 2 - .../pages/cluster/cluster-page.component.scss | 3 - .../event-consumer.component.html | 24 +++ .../event-consumer.component.scss | 0 .../event-consumer.component.ts | 28 +--- .../event-consumers-page.component.scss | 3 - .../pages/restore/restore-page.component.scss | 3 - .../pages/users/user-page.component.scss | 3 - .../pages/users/user.component.html | 20 +++ .../pages/users/user.component.scss | 0 .../pages/users/user.component.ts | 24 +-- .../pages/users/users-page.component.scss | 2 - .../administration/state/users.forms.ts | 7 + .../app/features/api/api-area.component.scss | 3 - .../pages/graphql/graphql-page.component.scss | 3 - .../apps/pages/apps-page.component.scss | 3 - .../apps/pages/news-dialog.component.html | 2 +- .../apps/pages/news-dialog.component.scss | 3 - .../apps/pages/news-dialog.component.ts | 4 - .../pages/onboarding-dialog.component.html | 2 +- .../pages/onboarding-dialog.component.scss | 3 - .../apps/pages/onboarding-dialog.component.ts | 4 - frontend/app/features/assets/declarations.ts | 3 +- frontend/app/features/assets/module.ts | 6 +- .../assets/pages/asset-tags.component.html | 18 +++ .../assets/pages/asset-tags.component.scss | 0 .../assets/pages/asset-tags.component.ts | 42 ++++++ .../pages/assets-filters-page.component.html | 29 +--- .../pages/assets-filters-page.component.scss | 2 - .../pages/assets-filters-page.component.ts | 5 - .../assets/pages/assets-page.component.scss | 3 - frontend/app/features/content/declarations.ts | 33 +++-- frontend/app/features/content/module.ts | 8 +- .../comments/comments-page.component.scss | 2 - .../content/content-field.component.html | 4 +- .../content/content-field.component.scss | 3 - .../pages/content/content-field.component.ts | 6 +- .../content-history-page.component.scss | 3 - .../pages/content/content-page.component.scss | 3 - .../content/field-languages.component.html | 17 +++ .../content/field-languages.component.scss | 0 .../content/field-languages.component.ts | 37 ++--- .../contents-filters-page.component.html | 23 +-- .../contents-filters-page.component.scss | 3 - .../contents-filters-page.component.ts | 9 -- .../contents/contents-page.component.scss | 4 +- .../custom-view-editor.component.html | 8 +- .../custom-view-editor.component.scss | 3 - .../contents/custom-view-editor.component.ts | 28 ++-- .../pages/schemas/schemas-page.component.scss | 3 - .../shared/content-list-field.component.ts | 138 ------------------ .../shared/content-list-header.component.ts | 119 --------------- .../shared/content-selector-item.component.ts | 69 --------- .../shared/content-status.component.scss | 2 - .../shared/content-value-editor.component.ts | 73 --------- .../content/shared/content-value.component.ts | 42 ------ .../shared/due-time-selector.component.scss | 2 - .../shared/due-time-selector.component.ts | 13 +- .../{ => forms}/array-editor.component.html | 0 .../{ => forms}/array-editor.component.scss | 3 - .../{ => forms}/array-editor.component.ts | 0 .../{ => forms}/array-item.component.html | 12 +- .../{ => forms}/array-item.component.scss | 3 - .../{ => forms}/array-item.component.ts | 16 +- .../{ => forms}/assets-editor.component.html | 0 .../{ => forms}/assets-editor.component.scss | 3 - .../{ => forms}/assets-editor.component.ts | 9 +- .../{ => forms}/field-editor.component.html | 0 .../{ => forms}/field-editor.component.scss | 3 - .../{ => forms}/field-editor.component.ts | 0 .../stock-photo-editor.component.html | 0 .../stock-photo-editor.component.scss | 3 - .../stock-photo-editor.component.ts | 4 +- .../{ => list}/content-list-cell.directive.ts | 0 .../list/content-list-field.component.html | 62 ++++++++ .../list/content-list-field.component.scss | 0 .../list/content-list-field.component.ts | 76 ++++++++++ .../list/content-list-header.component.html | 56 +++++++ .../list/content-list-header.component.scss | 0 .../list/content-list-header.component.ts | 63 ++++++++ .../list/content-value-editor.component.html | 48 ++++++ .../list/content-value-editor.component.scss | 0 .../list/content-value-editor.component.ts | 25 ++++ .../shared/list/content-value.component.html | 6 + .../shared/list/content-value.component.scss | 14 ++ .../shared/list/content-value.component.ts | 25 ++++ .../shared/{ => list}/content.component.html | 8 +- .../shared/{ => list}/content.component.scss | 3 - .../shared/{ => list}/content.component.ts | 16 -- .../shared/preview-button.component.scss | 2 - .../shared/reference-item.component.ts | 104 ------------- .../content-selector-item.component.html | 18 +++ .../content-selector-item.component.scss | 0 .../content-selector-item.component.ts | 52 +++++++ .../content-selector.component.html} | 0 .../content-selector.component.scss} | 3 - .../content-selector.component.ts} | 8 +- .../references/reference-item.component.html | 36 +++++ .../reference-item.component.scss | 3 - .../references/reference-item.component.ts | 63 ++++++++ .../references-editor.component.html | 4 +- .../references-editor.component.scss | 3 - .../references-editor.component.ts | 9 +- .../pages/dashboard-page.component.scss | 3 - .../events/rule-events-page.component.scss | 3 - .../actions/generic-action.component.scss | 3 - .../pages/rules/rule-element.component.scss | 3 - .../pages/rules/rule-icon.component.html | 7 + .../pages/rules/rule-icon.component.scss | 45 ++++++ .../rules/pages/rules/rule-icon.component.ts | 49 +------ .../pages/rules/rule-wizard.component.scss | 3 - .../rules/pages/rules/rule.component.scss | 3 - .../pages/rules/rules-page.component.scss | 3 - .../asset-changed-trigger.component.scss | 3 - .../triggers/comment-trigger.component.scss | 3 - .../content-changed-trigger.component.scss | 3 - .../schema-changed-trigger.component.scss | 3 - .../triggers/usage-trigger.component.scss | 3 - frontend/app/features/schemas/declarations.ts | 72 ++++----- .../schema-edit-form.component.html | 0 .../schema-edit-form.component.scss | 3 - .../schema-edit-form.component.ts | 0 .../schema-export-form.component.html | 0 .../schema-export-form.component.scss | 3 - .../schema-export-form.component.ts | 0 .../{ => fields}/field-wizard.component.html | 0 .../{ => fields}/field-wizard.component.scss | 3 - .../{ => fields}/field-wizard.component.ts | 0 .../schema/{ => fields}/field.component.html | 0 .../schema/{ => fields}/field.component.scss | 3 - .../schema/{ => fields}/field.component.ts | 0 .../forms/field-form-common.component.html | 53 +++++++ .../forms/field-form-common.component.scss | 0 .../forms/field-form-common.component.ts | 29 ++++ .../fields/forms/field-form-ui.component.html | 29 ++++ .../fields/forms/field-form-ui.component.scss | 0 .../fields/forms/field-form-ui.component.ts | 24 +++ .../field-form-validation.component.html | 32 ++++ .../field-form-validation.component.scss | 0 .../forms/field-form-validation.component.ts | 27 ++++ .../fields/forms/field-form.component.html | 30 ++++ .../fields/forms/field-form.component.scss | 0 .../fields/forms/field-form.component.ts | 53 +++++++ .../{ => fields}/schema-fields.component.html | 0 .../{ => fields}/schema-fields.component.scss | 3 - .../{ => fields}/schema-fields.component.ts | 0 .../types/array-validation.component.html | 0 .../types/array-validation.component.scss | 3 - .../types/array-validation.component.ts | 0 .../types/assets-ui.component.html | 0 .../fields/types/assets-ui.component.scss | 0 .../{ => fields}/types/assets-ui.component.ts | 0 .../types/assets-validation.component.html | 0 .../types/assets-validation.component.scss | 3 - .../types/assets-validation.component.ts | 0 .../types/boolean-ui.component.html | 0 .../fields/types/boolean-ui.component.scss | 0 .../types/boolean-ui.component.ts | 0 .../types/boolean-validation.component.html | 0 .../types/boolean-validation.component.scss | 0 .../types/boolean-validation.component.ts | 0 .../types/date-time-ui.component.html | 0 .../fields/types/date-time-ui.component.scss | 0 .../types/date-time-ui.component.ts | 0 .../types/date-time-validation.component.html | 0 .../types/date-time-validation.component.scss | 0 .../types/date-time-validation.component.ts | 0 .../types/geolocation-ui.component.html | 0 .../types/geolocation-ui.component.scss | 0 .../types/geolocation-ui.component.ts | 0 .../geolocation-validation.component.html | 0 .../geolocation-validation.component.scss | 3 + .../types/geolocation-validation.component.ts | 0 .../{ => fields}/types/json-ui.component.html | 0 .../fields/types/json-ui.component.scss | 3 + .../{ => fields}/types/json-ui.component.ts | 0 .../types/json-validation.component.html | 0 .../types/json-validation.component.scss | 3 + .../types/json-validation.component.ts | 0 .../types/number-ui.component.html | 0 .../fields/types/number-ui.component.scss | 0 .../{ => fields}/types/number-ui.component.ts | 0 .../types/number-validation.component.html | 0 .../types/number-validation.component.scss | 3 - .../types/number-validation.component.ts | 0 .../types/references-ui.component.html | 0 .../fields/types/references-ui.component.scss | 0 .../types/references-ui.component.ts | 0 .../references-validation.component.html | 0 .../references-validation.component.scss | 3 - .../types/references-validation.component.ts | 0 .../types/string-ui.component.html | 0 .../fields/types/string-ui.component.scss | 0 .../{ => fields}/types/string-ui.component.ts | 0 .../types/string-validation.component.html | 0 .../types/string-validation.component.scss | 3 - .../types/string-validation.component.ts | 0 .../{ => fields}/types/tags-ui.component.html | 0 .../fields/types/tags-ui.component.scss | 0 .../{ => fields}/types/tags-ui.component.ts | 0 .../types/tags-validation.component.html | 0 .../types/tags-validation.component.scss | 3 - .../types/tags-validation.component.ts | 0 .../forms/field-form-common.component.ts | 82 ----------- .../schema/forms/field-form-ui.component.ts | 53 ------- .../forms/field-form-validation.component.ts | 59 -------- .../schema/forms/field-form.component.ts | 83 ----------- .../schema-preview-urls-form.component.html | 0 .../schema-preview-urls-form.component.scss | 3 - .../schema-preview-urls-form.component.ts | 0 .../pages/schema/schema-page.component.scss | 3 - .../schema-scripts-form.component.html | 0 .../schema-scripts-form.component.scss | 3 - .../schema-scripts-form.component.ts | 0 .../schema/types/assets-ui.component.scss | 2 - .../schema/types/boolean-ui.component.scss | 2 - .../types/boolean-validation.component.scss | 2 - .../schema/types/date-time-ui.component.scss | 2 - .../types/date-time-validation.component.scss | 2 - .../types/geolocation-ui.component.scss | 2 - .../geolocation-validation.component.scss | 6 - .../pages/schema/types/json-ui.component.scss | 6 - .../types/json-validation.component.scss | 6 - .../schema/types/number-ui.component.scss | 2 - .../schema/types/references-ui.component.scss | 2 - .../schema/types/string-ui.component.scss | 2 - .../pages/schema/types/tags-ui.component.scss | 2 - .../schema/{ => ui}/field-list.component.html | 0 .../schema/{ => ui}/field-list.component.scss | 3 - .../schema/{ => ui}/field-list.component.ts | 0 .../{ => ui}/schema-ui-form.component.html | 0 .../{ => ui}/schema-ui-form.component.scss | 3 - .../{ => ui}/schema-ui-form.component.ts | 0 .../pages/schemas/schema-form.component.html | 4 +- .../pages/schemas/schema-form.component.scss | 3 - .../pages/schemas/schema-form.component.ts | 4 - .../pages/schemas/schemas-page.component.scss | 3 - .../pages/backups/backup.component.html | 49 +++++++ .../pages/backups/backup.component.scss | 0 .../pages/backups/backup.component.ts | 53 +------ .../pages/backups/backups-page.component.scss | 2 - .../clients/client-add-form.component.html | 17 +++ .../clients/client-add-form.component.scss | 0 .../clients/client-add-form.component.ts | 21 +-- .../client-connect-form.component.html | 2 +- .../client-connect-form.component.scss | 3 - .../clients/client-connect-form.component.ts | 4 - .../pages/clients/client.component.scss | 3 - .../pages/clients/clients-page.component.scss | 2 - .../contributor-add-form.component.scss | 3 - .../contributors/contributor.component.html | 26 ++++ .../contributors/contributor.component.scss | 0 .../contributors/contributor.component.ts | 30 +--- .../contributors-page.component.scss | 3 - .../import-contributors-dialog.component.html | 4 +- .../import-contributors-dialog.component.scss | 3 - .../import-contributors-dialog.component.ts | 4 - .../language-add-form.component.html | 14 ++ .../language-add-form.component.scss | 0 .../languages/language-add-form.component.ts | 18 +-- .../pages/languages/language.component.scss | 3 - .../languages/languages-page.component.scss | 2 - .../pages/more/more-page.component.scss | 3 - .../pages/patterns/pattern.component.scss | 3 - .../patterns/patterns-page.component.scss | 2 - .../settings/pages/plans/plan.component.scss | 3 - .../pages/plans/plans-page.component.scss | 3 - .../pages/roles/role-add-form.component.html | 17 +++ .../pages/roles/role-add-form.component.scss | 0 .../pages/roles/role-add-form.component.ts | 21 +-- .../settings/pages/roles/role.component.scss | 3 - .../pages/roles/roles-page.component.scss | 2 - .../workflow-add-form.component.html | 17 +++ .../workflow-add-form.component.scss | 0 .../workflows/workflow-add-form.component.ts | 20 +-- .../workflows/workflow-step.component.html | 8 +- .../workflows/workflow-step.component.scss | 3 - .../workflows/workflow-step.component.ts | 16 -- .../workflow-transition.component.html | 2 +- .../workflow-transition.component.scss | 3 - .../workflow-transition.component.ts | 4 - .../pages/workflows/workflow.component.scss | 3 - .../workflows/workflows-page.component.scss | 3 - .../settings/settings-area.component.scss | 3 - .../framework/angular/avatar.component.html | 5 + .../framework/angular/avatar.component.scss | 0 .../app/framework/angular/avatar.component.ts | 32 ++-- .../app/framework/angular/code.component.scss | 3 - frontend/app/framework/angular/drag-helper.ts | 3 +- .../forms/control-errors.component.scss | 3 - .../forms/editable-title.component.scss | 3 - .../{ => editors}/autocomplete.component.html | 0 .../{ => editors}/autocomplete.component.scss | 3 - .../{ => editors}/autocomplete.component.ts | 7 +- .../checkbox-group.component.html | 0 .../checkbox-group.component.scss | 3 - .../{ => editors}/checkbox-group.component.ts | 4 +- .../{ => editors}/code-editor.component.html | 0 .../{ => editors}/code-editor.component.scss | 3 - .../{ => editors}/code-editor.component.ts | 4 +- .../{ => editors}/color-picker.component.html | 0 .../{ => editors}/color-picker.component.scss | 3 - .../{ => editors}/color-picker.component.ts | 4 +- .../date-time-editor.component.html | 0 .../date-time-editor.component.scss | 3 - .../date-time-editor.component.ts | 4 +- .../{ => editors}/dropdown.component.html | 0 .../{ => editors}/dropdown.component.scss | 3 - .../forms/{ => editors}/dropdown.component.ts | 7 +- .../iframe-editor.component.html | 0 .../iframe-editor.component.scss | 3 - .../{ => editors}/iframe-editor.component.ts | 6 +- .../{ => editors}/json-editor.component.html | 0 .../{ => editors}/json-editor.component.scss | 3 - .../{ => editors}/json-editor.component.ts | 4 +- .../forms/{ => editors}/stars.component.html | 0 .../forms/{ => editors}/stars.component.scss | 3 - .../forms/{ => editors}/stars.component.ts | 4 +- .../{ => editors}/tag-editor.component.html | 0 .../{ => editors}/tag-editor.component.scss | 3 - .../{ => editors}/tag-editor.component.ts | 7 +- .../forms/{ => editors}/toggle.component.html | 0 .../forms/{ => editors}/toggle.component.scss | 3 - .../forms/{ => editors}/toggle.component.ts | 4 +- .../angular/forms/form-alert.component.html | 3 + .../angular/forms/form-alert.component.scss | 11 ++ .../angular/forms/form-alert.component.ts | 18 +-- .../angular/forms/form-error.component.html | 10 ++ .../angular/forms/form-error.component.scss | 0 .../angular/forms/form-error.component.ts | 14 +- .../angular/forms/form-hint.component.html | 3 + .../angular/forms/form-hint.component.scss | 11 ++ .../angular/forms/form-hint.component.ts | 18 +-- .../forms/indeterminate-value.directive.ts | 4 +- .../forms/transform-input.directive.ts | 4 +- .../angular/list-view.component.scss | 3 - .../modals/dialog-renderer.component.scss | 3 - .../modals/modal-dialog.component.html | 4 +- .../modals/modal-dialog.component.scss | 3 - .../angular/modals/modal-dialog.component.ts | 4 - .../modals/onboarding-tooltip.component.scss | 3 - .../angular/modals/root-view.component.html | 3 + .../angular/modals/root-view.component.scss | 0 .../angular/modals/root-view.component.ts | 7 +- .../framework/angular/pager.component.scss | 3 - .../framework/angular/panel.component.html | 2 +- .../framework/angular/panel.component.scss | 3 - .../app/framework/angular/panel.component.ts | 4 - .../angular/status-icon.component.scss | 3 - frontend/app/framework/declarations.ts | 25 ++-- .../framework/services/analytics.service.ts | 4 +- .../app/framework/utils/array-extensions.ts | 1 - frontend/app/framework/utils/hateos.ts | 1 - frontend/app/framework/utils/picasso.ts | 9 +- frontend/app/framework/utils/types.spec.ts | 92 ++++++++++-- frontend/app/framework/utils/types.ts | 126 ++++++++++------ .../shared/components/app-form.component.scss | 2 - .../asset-folder-form.component.scss | 2 - .../shared/components/asset-path.component.ts | 45 ------ .../{ => assets}/asset-dialog.component.html | 0 .../{ => assets}/asset-dialog.component.scss | 3 - .../{ => assets}/asset-dialog.component.ts | 0 .../asset-folder-form.component.html | 0 .../assets/asset-folder-form.component.scss | 0 .../asset-folder-form.component.ts | 0 .../{ => assets}/asset-folder.component.html | 2 +- .../{ => assets}/asset-folder.component.scss | 3 - .../{ => assets}/asset-folder.component.ts | 4 - .../assets/asset-path.component.html | 12 ++ .../assets/asset-path.component.scss | 3 + .../components/assets/asset-path.component.ts | 24 +++ .../asset-uploader.component.html | 0 .../asset-uploader.component.scss | 3 - .../{ => assets}/asset-uploader.component.ts | 2 +- .../{ => assets}/asset.component.html | 12 +- .../{ => assets}/asset.component.scss | 3 - .../{ => assets}/asset.component.ts | 12 -- .../{ => assets}/assets-list.component.html | 2 +- .../{ => assets}/assets-list.component.scss | 3 - .../{ => assets}/assets-list.component.ts | 4 - .../assets-selector.component.html | 0 .../assets-selector.component.scss | 3 - .../{ => assets}/assets-selector.component.ts | 0 .../app/shared/components/assets/pipes.ts | 75 ++++++++++ .../{ => comments}/comment.component.html | 2 +- .../{ => comments}/comment.component.scss | 3 - .../{ => comments}/comment.component.ts | 4 - .../{ => comments}/comments.component.html | 0 .../{ => comments}/comments.component.scss | 3 - .../{ => comments}/comments.component.ts | 0 .../geolocation-editor.component.html | 0 .../geolocation-editor.component.scss | 3 - .../geolocation-editor.component.ts | 4 +- .../language-selector.component.html | 0 .../language-selector.component.scss | 3 - .../language-selector.component.ts | 7 +- .../markdown-editor.component.html | 0 .../markdown-editor.component.scss | 3 - .../{ => forms}/markdown-editor.component.ts | 4 +- .../forms/references-dropdown.component.html | 5 + .../forms/references-dropdown.component.scss | 3 + .../references-dropdown.component.ts | 16 +- .../forms/references-tags.component.html | 3 + .../forms/references-tags.component.scss | 3 + .../{ => forms}/references-tags.component.ts | 14 +- .../{ => forms}/rich-editor.component.html | 0 .../{ => forms}/rich-editor.component.scss | 3 - .../{ => forms}/rich-editor.component.ts | 4 +- .../app/shared/components/help.component.scss | 2 - .../{ => help}/help-markdown.pipe.spec.ts | 0 .../{ => help}/help-markdown.pipe.ts | 0 .../components/{ => help}/help.component.html | 0 .../components/help/help.component.scss | 0 .../components/{ => help}/help.component.ts | 0 .../shared/components/history.component.scss | 2 - .../{ => history}/history-list.component.html | 0 .../{ => history}/history-list.component.scss | 3 - .../{ => history}/history-list.component.ts | 0 .../{ => history}/history.component.html | 0 .../components/history/history.component.scss | 0 .../{ => history}/history.component.ts | 0 .../app/shared/components/history/pipes.ts | 61 ++++++++ frontend/app/shared/components/pipes.ts | 109 -------------- .../queries/query-path.component.ts | 43 ------ .../components/saved-queries.component.ts | 87 ----------- .../components/schema-category.component.scss | 3 - .../components/schema-category.component.ts | 4 - .../queries/filter-comparison.component.html | 2 +- .../queries/filter-comparison.component.scss | 3 - .../queries/filter-comparison.component.ts | 4 - .../queries/filter-logical.component.html | 2 +- .../queries/filter-logical.component.scss | 3 - .../queries/filter-logical.component.ts | 4 - .../search/queries/filter-node.component.html | 11 ++ .../search/queries/filter-node.component.scss | 0 .../queries/filter-node.component.ts | 15 +- .../search/queries/query-path.component.html | 16 ++ .../search/queries/query-path.component.scss | 0 .../search/queries/query-path.component.ts | 27 ++++ .../search/queries/query.component.html | 15 ++ .../search/queries/query.component.scss | 0 .../{ => search}/queries/query.component.ts | 46 +----- .../search/queries/sorting.component.html | 21 +++ .../search/queries/sorting.component.scss | 0 .../{ => search}/queries/sorting.component.ts | 25 +--- .../search/query-list.component.html | 17 +++ .../search/query-list.component.scss | 0 .../components/search/query-list.component.ts | 48 ++++++ .../{ => search}/search-form.component.html | 0 .../{ => search}/search-form.component.scss | 3 - .../{ => search}/search-form.component.ts | 0 .../search/shared-queries.component.html | 25 ++++ .../search/shared-queries.component.scss | 0 .../search/shared-queries.component.ts | 30 ++++ .../components/table-header.component.html | 12 ++ .../components/table-header.component.scss | 0 .../components/table-header.component.ts | 31 ++-- frontend/app/shared/declarations.ts | 64 ++++---- frontend/app/shared/module.ts | 3 + .../shared/services/assets.service.spec.ts | 15 +- .../shared/services/contents.service.spec.ts | 2 +- .../shared/services/workflows.service.spec.ts | 1 - frontend/app/shared/state/apps.state.spec.ts | 2 +- frontend/app/shared/state/apps.state.ts | 3 +- frontend/app/shared/state/assets.forms.ts | 4 +- .../app/shared/state/assets.state.spec.ts | 10 +- frontend/app/shared/state/assets.state.ts | 25 +--- .../app/shared/state/clients.state.spec.ts | 2 +- frontend/app/shared/state/contents.forms.ts | 8 +- frontend/app/shared/state/contents.state.ts | 27 +--- .../app/shared/state/contributors.forms.ts | 2 +- .../shared/state/contributors.state.spec.ts | 2 +- .../app/shared/state/languages.state.spec.ts | 2 +- .../app/shared/state/patterns.state.spec.ts | 2 +- frontend/app/shared/state/queries.spec.ts | 21 +-- frontend/app/shared/state/queries.ts | 38 ++--- frontend/app/shared/state/query.spec.ts | 56 +++++++ frontend/app/shared/state/query.ts | 45 +++++- frontend/app/shared/state/roles.state.spec.ts | 2 +- .../shared/state/rule-events.state.spec.ts | 2 +- frontend/app/shared/state/rules.state.spec.ts | 2 +- .../app/shared/state/schemas.state.spec.ts | 2 +- frontend/app/shared/state/table-fields.ts | 2 +- frontend/app/shared/state/ui.state.ts | 7 +- .../app/shared/state/workflows.state.spec.ts | 2 +- .../shell/pages/app/app-area.component.scss | 2 - .../shell/pages/app/left-menu.component.scss | 2 - .../forbidden/forbidden-page.component.html | 7 + .../forbidden/forbidden-page.component.scss | 0 .../forbidden/forbidden-page.component.ts | 11 +- .../shell/pages/home/home-page.component.scss | 3 - .../pages/internal/apps-menu.component.scss | 3 - .../internal/internal-area.component.scss | 3 - .../shell/pages/internal/logo.component.html | 3 + .../shell/pages/internal/logo.component.scss | 3 + .../shell/pages/internal/logo.component.ts | 12 +- .../notifications-menu.component.scss | 3 - .../internal/profile-menu.component.scss | 3 - .../not-found/not-found-page.component.html | 7 + .../not-found/not-found-page.component.scss | 0 .../not-found/not-found-page.component.ts | 11 +- frontend/app/theme/_bootstrap.scss | 3 - frontend/app/theme/_common.scss | 3 - frontend/app/theme/_forms.scss | 3 - frontend/app/theme/_lists.scss | 3 - frontend/app/theme/_panels.scss | 3 - frontend/app/theme/_static.scss | 3 - frontend/tsconfig.app.json | 13 ++ frontend/tsconfig.json | 60 ++++---- frontend/tsconfig.spec.json | 3 + 513 files changed, 2390 insertions(+), 2610 deletions(-) create mode 100644 frontend/app/features/administration/pages/event-consumers/event-consumer.component.html create mode 100644 frontend/app/features/administration/pages/event-consumers/event-consumer.component.scss create mode 100644 frontend/app/features/administration/pages/users/user.component.html create mode 100644 frontend/app/features/administration/pages/users/user.component.scss create mode 100644 frontend/app/features/assets/pages/asset-tags.component.html create mode 100644 frontend/app/features/assets/pages/asset-tags.component.scss create mode 100644 frontend/app/features/assets/pages/asset-tags.component.ts create mode 100644 frontend/app/features/content/pages/content/field-languages.component.html create mode 100644 frontend/app/features/content/pages/content/field-languages.component.scss delete mode 100644 frontend/app/features/content/shared/content-list-field.component.ts delete mode 100644 frontend/app/features/content/shared/content-list-header.component.ts delete mode 100644 frontend/app/features/content/shared/content-selector-item.component.ts delete mode 100644 frontend/app/features/content/shared/content-value-editor.component.ts delete mode 100644 frontend/app/features/content/shared/content-value.component.ts rename frontend/app/features/content/shared/{ => forms}/array-editor.component.html (100%) rename frontend/app/features/content/shared/{ => forms}/array-editor.component.scss (82%) rename frontend/app/features/content/shared/{ => forms}/array-editor.component.ts (100%) rename frontend/app/features/content/shared/{ => forms}/array-item.component.html (86%) rename frontend/app/features/content/shared/{ => forms}/array-item.component.scss (94%) rename frontend/app/features/content/shared/{ => forms}/array-item.component.ts (94%) rename frontend/app/features/content/shared/{ => forms}/assets-editor.component.html (100%) rename frontend/app/features/content/shared/{ => forms}/assets-editor.component.scss (96%) rename frontend/app/features/content/shared/{ => forms}/assets-editor.component.ts (95%) rename frontend/app/features/content/shared/{ => forms}/field-editor.component.html (100%) rename frontend/app/features/content/shared/{ => forms}/field-editor.component.scss (92%) rename frontend/app/features/content/shared/{ => forms}/field-editor.component.ts (100%) rename frontend/app/features/content/shared/{ => forms}/stock-photo-editor.component.html (100%) rename frontend/app/features/content/shared/{ => forms}/stock-photo-editor.component.scss (97%) rename frontend/app/features/content/shared/{ => forms}/stock-photo-editor.component.ts (97%) rename frontend/app/features/content/shared/{ => list}/content-list-cell.directive.ts (100%) create mode 100644 frontend/app/features/content/shared/list/content-list-field.component.html create mode 100644 frontend/app/features/content/shared/list/content-list-field.component.scss create mode 100644 frontend/app/features/content/shared/list/content-list-field.component.ts create mode 100644 frontend/app/features/content/shared/list/content-list-header.component.html create mode 100644 frontend/app/features/content/shared/list/content-list-header.component.scss create mode 100644 frontend/app/features/content/shared/list/content-list-header.component.ts create mode 100644 frontend/app/features/content/shared/list/content-value-editor.component.html create mode 100644 frontend/app/features/content/shared/list/content-value-editor.component.scss create mode 100644 frontend/app/features/content/shared/list/content-value-editor.component.ts create mode 100644 frontend/app/features/content/shared/list/content-value.component.html create mode 100644 frontend/app/features/content/shared/list/content-value.component.scss create mode 100644 frontend/app/features/content/shared/list/content-value.component.ts rename frontend/app/features/content/shared/{ => list}/content.component.html (88%) rename frontend/app/features/content/shared/{ => list}/content.component.scss (89%) rename frontend/app/features/content/shared/{ => list}/content.component.ts (90%) delete mode 100644 frontend/app/features/content/shared/reference-item.component.ts create mode 100644 frontend/app/features/content/shared/references/content-selector-item.component.html create mode 100644 frontend/app/features/content/shared/references/content-selector-item.component.scss create mode 100644 frontend/app/features/content/shared/references/content-selector-item.component.ts rename frontend/app/features/content/shared/{contents-selector.component.html => references/content-selector.component.html} (100%) rename frontend/app/features/content/shared/{contents-selector.component.scss => references/content-selector.component.scss} (92%) rename frontend/app/features/content/shared/{contents-selector.component.ts => references/content-selector.component.ts} (94%) create mode 100644 frontend/app/features/content/shared/references/reference-item.component.html rename frontend/app/features/content/shared/{ => references}/reference-item.component.scss (90%) create mode 100644 frontend/app/features/content/shared/references/reference-item.component.ts rename frontend/app/features/content/shared/{ => references}/references-editor.component.html (95%) rename frontend/app/features/content/shared/{ => references}/references-editor.component.scss (95%) rename frontend/app/features/content/shared/{ => references}/references-editor.component.ts (94%) create mode 100644 frontend/app/features/rules/pages/rules/rule-icon.component.html create mode 100644 frontend/app/features/rules/pages/rules/rule-icon.component.scss rename frontend/app/features/schemas/pages/schema/{ => common}/schema-edit-form.component.html (100%) rename frontend/app/features/schemas/pages/schema/{ => common}/schema-edit-form.component.scss (68%) rename frontend/app/features/schemas/pages/schema/{ => common}/schema-edit-form.component.ts (100%) rename frontend/app/features/schemas/pages/schema/{ => export}/schema-export-form.component.html (100%) rename frontend/app/features/schemas/pages/schema/{ => export}/schema-export-form.component.scss (90%) rename frontend/app/features/schemas/pages/schema/{ => export}/schema-export-form.component.ts (100%) rename frontend/app/features/schemas/pages/schema/{ => fields}/field-wizard.component.html (100%) rename frontend/app/features/schemas/pages/schema/{ => fields}/field-wizard.component.scss (85%) rename frontend/app/features/schemas/pages/schema/{ => fields}/field-wizard.component.ts (100%) rename frontend/app/features/schemas/pages/schema/{ => fields}/field.component.html (100%) rename frontend/app/features/schemas/pages/schema/{ => fields}/field.component.scss (97%) rename frontend/app/features/schemas/pages/schema/{ => fields}/field.component.ts (100%) create mode 100644 frontend/app/features/schemas/pages/schema/fields/forms/field-form-common.component.html create mode 100644 frontend/app/features/schemas/pages/schema/fields/forms/field-form-common.component.scss create mode 100644 frontend/app/features/schemas/pages/schema/fields/forms/field-form-common.component.ts create mode 100644 frontend/app/features/schemas/pages/schema/fields/forms/field-form-ui.component.html create mode 100644 frontend/app/features/schemas/pages/schema/fields/forms/field-form-ui.component.scss create mode 100644 frontend/app/features/schemas/pages/schema/fields/forms/field-form-ui.component.ts create mode 100644 frontend/app/features/schemas/pages/schema/fields/forms/field-form-validation.component.html create mode 100644 frontend/app/features/schemas/pages/schema/fields/forms/field-form-validation.component.scss create mode 100644 frontend/app/features/schemas/pages/schema/fields/forms/field-form-validation.component.ts create mode 100644 frontend/app/features/schemas/pages/schema/fields/forms/field-form.component.html create mode 100644 frontend/app/features/schemas/pages/schema/fields/forms/field-form.component.scss create mode 100644 frontend/app/features/schemas/pages/schema/fields/forms/field-form.component.ts rename frontend/app/features/schemas/pages/schema/{ => fields}/schema-fields.component.html (100%) rename frontend/app/features/schemas/pages/schema/{ => fields}/schema-fields.component.scss (90%) rename frontend/app/features/schemas/pages/schema/{ => fields}/schema-fields.component.ts (100%) rename frontend/app/features/schemas/pages/schema/{ => fields}/types/array-validation.component.html (100%) rename frontend/app/features/schemas/pages/schema/{ => fields}/types/array-validation.component.scss (81%) rename frontend/app/features/schemas/pages/schema/{ => fields}/types/array-validation.component.ts (100%) rename frontend/app/features/schemas/pages/schema/{ => fields}/types/assets-ui.component.html (100%) create mode 100644 frontend/app/features/schemas/pages/schema/fields/types/assets-ui.component.scss rename frontend/app/features/schemas/pages/schema/{ => fields}/types/assets-ui.component.ts (100%) rename frontend/app/features/schemas/pages/schema/{ => fields}/types/assets-validation.component.html (100%) rename frontend/app/features/schemas/pages/schema/{ => fields}/types/assets-validation.component.scss (84%) rename frontend/app/features/schemas/pages/schema/{ => fields}/types/assets-validation.component.ts (100%) rename frontend/app/features/schemas/pages/schema/{ => fields}/types/boolean-ui.component.html (100%) create mode 100644 frontend/app/features/schemas/pages/schema/fields/types/boolean-ui.component.scss rename frontend/app/features/schemas/pages/schema/{ => fields}/types/boolean-ui.component.ts (100%) rename frontend/app/features/schemas/pages/schema/{ => fields}/types/boolean-validation.component.html (100%) create mode 100644 frontend/app/features/schemas/pages/schema/fields/types/boolean-validation.component.scss rename frontend/app/features/schemas/pages/schema/{ => fields}/types/boolean-validation.component.ts (100%) rename frontend/app/features/schemas/pages/schema/{ => fields}/types/date-time-ui.component.html (100%) create mode 100644 frontend/app/features/schemas/pages/schema/fields/types/date-time-ui.component.scss rename frontend/app/features/schemas/pages/schema/{ => fields}/types/date-time-ui.component.ts (100%) rename frontend/app/features/schemas/pages/schema/{ => fields}/types/date-time-validation.component.html (100%) create mode 100644 frontend/app/features/schemas/pages/schema/fields/types/date-time-validation.component.scss rename frontend/app/features/schemas/pages/schema/{ => fields}/types/date-time-validation.component.ts (100%) rename frontend/app/features/schemas/pages/schema/{ => fields}/types/geolocation-ui.component.html (100%) create mode 100644 frontend/app/features/schemas/pages/schema/fields/types/geolocation-ui.component.scss rename frontend/app/features/schemas/pages/schema/{ => fields}/types/geolocation-ui.component.ts (100%) rename frontend/app/features/schemas/pages/schema/{ => fields}/types/geolocation-validation.component.html (100%) create mode 100644 frontend/app/features/schemas/pages/schema/fields/types/geolocation-validation.component.scss rename frontend/app/features/schemas/pages/schema/{ => fields}/types/geolocation-validation.component.ts (100%) rename frontend/app/features/schemas/pages/schema/{ => fields}/types/json-ui.component.html (100%) create mode 100644 frontend/app/features/schemas/pages/schema/fields/types/json-ui.component.scss rename frontend/app/features/schemas/pages/schema/{ => fields}/types/json-ui.component.ts (100%) rename frontend/app/features/schemas/pages/schema/{ => fields}/types/json-validation.component.html (100%) create mode 100644 frontend/app/features/schemas/pages/schema/fields/types/json-validation.component.scss rename frontend/app/features/schemas/pages/schema/{ => fields}/types/json-validation.component.ts (100%) rename frontend/app/features/schemas/pages/schema/{ => fields}/types/number-ui.component.html (100%) create mode 100644 frontend/app/features/schemas/pages/schema/fields/types/number-ui.component.scss rename frontend/app/features/schemas/pages/schema/{ => fields}/types/number-ui.component.ts (100%) rename frontend/app/features/schemas/pages/schema/{ => fields}/types/number-validation.component.html (100%) rename frontend/app/features/schemas/pages/schema/{ => fields}/types/number-validation.component.scss (76%) rename frontend/app/features/schemas/pages/schema/{ => fields}/types/number-validation.component.ts (100%) rename frontend/app/features/schemas/pages/schema/{ => fields}/types/references-ui.component.html (100%) create mode 100644 frontend/app/features/schemas/pages/schema/fields/types/references-ui.component.scss rename frontend/app/features/schemas/pages/schema/{ => fields}/types/references-ui.component.ts (100%) rename frontend/app/features/schemas/pages/schema/{ => fields}/types/references-validation.component.html (100%) rename frontend/app/features/schemas/pages/schema/{ => fields}/types/references-validation.component.scss (81%) rename frontend/app/features/schemas/pages/schema/{ => fields}/types/references-validation.component.ts (100%) rename frontend/app/features/schemas/pages/schema/{ => fields}/types/string-ui.component.html (100%) create mode 100644 frontend/app/features/schemas/pages/schema/fields/types/string-ui.component.scss rename frontend/app/features/schemas/pages/schema/{ => fields}/types/string-ui.component.ts (100%) rename frontend/app/features/schemas/pages/schema/{ => fields}/types/string-validation.component.html (100%) rename frontend/app/features/schemas/pages/schema/{ => fields}/types/string-validation.component.scss (93%) rename frontend/app/features/schemas/pages/schema/{ => fields}/types/string-validation.component.ts (100%) rename frontend/app/features/schemas/pages/schema/{ => fields}/types/tags-ui.component.html (100%) create mode 100644 frontend/app/features/schemas/pages/schema/fields/types/tags-ui.component.scss rename frontend/app/features/schemas/pages/schema/{ => fields}/types/tags-ui.component.ts (100%) rename frontend/app/features/schemas/pages/schema/{ => fields}/types/tags-validation.component.html (100%) rename frontend/app/features/schemas/pages/schema/{ => fields}/types/tags-validation.component.scss (81%) rename frontend/app/features/schemas/pages/schema/{ => fields}/types/tags-validation.component.ts (100%) delete mode 100644 frontend/app/features/schemas/pages/schema/forms/field-form-common.component.ts delete mode 100644 frontend/app/features/schemas/pages/schema/forms/field-form-ui.component.ts delete mode 100644 frontend/app/features/schemas/pages/schema/forms/field-form-validation.component.ts delete mode 100644 frontend/app/features/schemas/pages/schema/forms/field-form.component.ts rename frontend/app/features/schemas/pages/schema/{ => preview}/schema-preview-urls-form.component.html (100%) rename frontend/app/features/schemas/pages/schema/{ => preview}/schema-preview-urls-form.component.scss (82%) rename frontend/app/features/schemas/pages/schema/{ => preview}/schema-preview-urls-form.component.ts (100%) rename frontend/app/features/schemas/pages/schema/{ => scripts}/schema-scripts-form.component.html (100%) rename frontend/app/features/schemas/pages/schema/{ => scripts}/schema-scripts-form.component.scss (90%) rename frontend/app/features/schemas/pages/schema/{ => scripts}/schema-scripts-form.component.ts (100%) delete mode 100644 frontend/app/features/schemas/pages/schema/types/assets-ui.component.scss delete mode 100644 frontend/app/features/schemas/pages/schema/types/boolean-ui.component.scss delete mode 100644 frontend/app/features/schemas/pages/schema/types/boolean-validation.component.scss delete mode 100644 frontend/app/features/schemas/pages/schema/types/date-time-ui.component.scss delete mode 100644 frontend/app/features/schemas/pages/schema/types/date-time-validation.component.scss delete mode 100644 frontend/app/features/schemas/pages/schema/types/geolocation-ui.component.scss delete mode 100644 frontend/app/features/schemas/pages/schema/types/geolocation-validation.component.scss delete mode 100644 frontend/app/features/schemas/pages/schema/types/json-ui.component.scss delete mode 100644 frontend/app/features/schemas/pages/schema/types/json-validation.component.scss delete mode 100644 frontend/app/features/schemas/pages/schema/types/number-ui.component.scss delete mode 100644 frontend/app/features/schemas/pages/schema/types/references-ui.component.scss delete mode 100644 frontend/app/features/schemas/pages/schema/types/string-ui.component.scss delete mode 100644 frontend/app/features/schemas/pages/schema/types/tags-ui.component.scss rename frontend/app/features/schemas/pages/schema/{ => ui}/field-list.component.html (100%) rename frontend/app/features/schemas/pages/schema/{ => ui}/field-list.component.scss (92%) rename frontend/app/features/schemas/pages/schema/{ => ui}/field-list.component.ts (100%) rename frontend/app/features/schemas/pages/schema/{ => ui}/schema-ui-form.component.html (100%) rename frontend/app/features/schemas/pages/schema/{ => ui}/schema-ui-form.component.scss (88%) rename frontend/app/features/schemas/pages/schema/{ => ui}/schema-ui-form.component.ts (100%) create mode 100644 frontend/app/features/settings/pages/backups/backup.component.html create mode 100644 frontend/app/features/settings/pages/backups/backup.component.scss create mode 100644 frontend/app/features/settings/pages/clients/client-add-form.component.html create mode 100644 frontend/app/features/settings/pages/clients/client-add-form.component.scss create mode 100644 frontend/app/features/settings/pages/contributors/contributor.component.html create mode 100644 frontend/app/features/settings/pages/contributors/contributor.component.scss create mode 100644 frontend/app/features/settings/pages/languages/language-add-form.component.html create mode 100644 frontend/app/features/settings/pages/languages/language-add-form.component.scss create mode 100644 frontend/app/features/settings/pages/roles/role-add-form.component.html create mode 100644 frontend/app/features/settings/pages/roles/role-add-form.component.scss create mode 100644 frontend/app/features/settings/pages/workflows/workflow-add-form.component.html create mode 100644 frontend/app/features/settings/pages/workflows/workflow-add-form.component.scss create mode 100644 frontend/app/framework/angular/avatar.component.html create mode 100644 frontend/app/framework/angular/avatar.component.scss rename frontend/app/framework/angular/forms/{ => editors}/autocomplete.component.html (100%) rename frontend/app/framework/angular/forms/{ => editors}/autocomplete.component.scss (50%) rename frontend/app/framework/angular/forms/{ => editors}/autocomplete.component.ts (97%) rename frontend/app/framework/angular/forms/{ => editors}/checkbox-group.component.html (100%) rename frontend/app/framework/angular/forms/{ => editors}/checkbox-group.component.scss (80%) rename frontend/app/framework/angular/forms/{ => editors}/checkbox-group.component.ts (96%) rename frontend/app/framework/angular/forms/{ => editors}/code-editor.component.html (100%) rename frontend/app/framework/angular/forms/{ => editors}/code-editor.component.scss (92%) rename frontend/app/framework/angular/forms/{ => editors}/code-editor.component.ts (97%) rename frontend/app/framework/angular/forms/{ => editors}/color-picker.component.html (100%) rename frontend/app/framework/angular/forms/{ => editors}/color-picker.component.scss (91%) rename frontend/app/framework/angular/forms/{ => editors}/color-picker.component.ts (97%) rename frontend/app/framework/angular/forms/{ => editors}/date-time-editor.component.html (100%) rename frontend/app/framework/angular/forms/{ => editors}/date-time-editor.component.scss (95%) rename frontend/app/framework/angular/forms/{ => editors}/date-time-editor.component.ts (98%) rename frontend/app/framework/angular/forms/{ => editors}/dropdown.component.html (100%) rename frontend/app/framework/angular/forms/{ => editors}/dropdown.component.scss (96%) rename frontend/app/framework/angular/forms/{ => editors}/dropdown.component.ts (96%) rename frontend/app/framework/angular/forms/{ => editors}/iframe-editor.component.html (100%) rename frontend/app/framework/angular/forms/{ => editors}/iframe-editor.component.scss (63%) rename frontend/app/framework/angular/forms/{ => editors}/iframe-editor.component.ts (96%) rename frontend/app/framework/angular/forms/{ => editors}/json-editor.component.html (100%) rename frontend/app/framework/angular/forms/{ => editors}/json-editor.component.scss (92%) rename frontend/app/framework/angular/forms/{ => editors}/json-editor.component.ts (98%) rename frontend/app/framework/angular/forms/{ => editors}/stars.component.html (100%) rename frontend/app/framework/angular/forms/{ => editors}/stars.component.scss (93%) rename frontend/app/framework/angular/forms/{ => editors}/stars.component.ts (97%) rename frontend/app/framework/angular/forms/{ => editors}/tag-editor.component.html (100%) rename frontend/app/framework/angular/forms/{ => editors}/tag-editor.component.scss (98%) rename frontend/app/framework/angular/forms/{ => editors}/tag-editor.component.ts (98%) rename frontend/app/framework/angular/forms/{ => editors}/toggle.component.html (100%) rename frontend/app/framework/angular/forms/{ => editors}/toggle.component.scss (97%) rename frontend/app/framework/angular/forms/{ => editors}/toggle.component.ts (96%) create mode 100644 frontend/app/framework/angular/forms/form-alert.component.html create mode 100644 frontend/app/framework/angular/forms/form-alert.component.scss create mode 100644 frontend/app/framework/angular/forms/form-error.component.html create mode 100644 frontend/app/framework/angular/forms/form-error.component.scss create mode 100644 frontend/app/framework/angular/forms/form-hint.component.html create mode 100644 frontend/app/framework/angular/forms/form-hint.component.scss create mode 100644 frontend/app/framework/angular/modals/root-view.component.html create mode 100644 frontend/app/framework/angular/modals/root-view.component.scss delete mode 100644 frontend/app/shared/components/asset-folder-form.component.scss delete mode 100644 frontend/app/shared/components/asset-path.component.ts rename frontend/app/shared/components/{ => assets}/asset-dialog.component.html (100%) rename frontend/app/shared/components/{ => assets}/asset-dialog.component.scss (84%) rename frontend/app/shared/components/{ => assets}/asset-dialog.component.ts (100%) rename frontend/app/shared/components/{ => assets}/asset-folder-form.component.html (100%) create mode 100644 frontend/app/shared/components/assets/asset-folder-form.component.scss rename frontend/app/shared/components/{ => assets}/asset-folder-form.component.ts (100%) rename frontend/app/shared/components/{ => assets}/asset-folder.component.html (96%) rename frontend/app/shared/components/{ => assets}/asset-folder.component.scss (93%) rename frontend/app/shared/components/{ => assets}/asset-folder.component.ts (94%) create mode 100644 frontend/app/shared/components/assets/asset-path.component.html create mode 100644 frontend/app/shared/components/assets/asset-path.component.scss create mode 100644 frontend/app/shared/components/assets/asset-path.component.ts rename frontend/app/shared/components/{ => assets}/asset-uploader.component.html (100%) rename frontend/app/shared/components/{ => assets}/asset-uploader.component.scss (97%) rename frontend/app/shared/components/{ => assets}/asset-uploader.component.ts (95%) rename frontend/app/shared/components/{ => assets}/asset.component.html (94%) rename frontend/app/shared/components/{ => assets}/asset.component.scss (99%) rename frontend/app/shared/components/{ => assets}/asset.component.ts (94%) rename frontend/app/shared/components/{ => assets}/assets-list.component.html (98%) rename frontend/app/shared/components/{ => assets}/assets-list.component.scss (97%) rename frontend/app/shared/components/{ => assets}/assets-list.component.ts (97%) rename frontend/app/shared/components/{ => assets}/assets-selector.component.html (100%) rename frontend/app/shared/components/{ => assets}/assets-selector.component.scss (92%) rename frontend/app/shared/components/{ => assets}/assets-selector.component.ts (100%) create mode 100644 frontend/app/shared/components/assets/pipes.ts rename frontend/app/shared/components/{ => comments}/comment.component.html (95%) rename frontend/app/shared/components/{ => comments}/comment.component.scss (95%) rename frontend/app/shared/components/{ => comments}/comment.component.ts (92%) rename frontend/app/shared/components/{ => comments}/comments.component.html (100%) rename frontend/app/shared/components/{ => comments}/comments.component.scss (93%) rename frontend/app/shared/components/{ => comments}/comments.component.ts (100%) rename frontend/app/shared/components/{ => forms}/geolocation-editor.component.html (100%) rename frontend/app/shared/components/{ => forms}/geolocation-editor.component.scss (88%) rename frontend/app/shared/components/{ => forms}/geolocation-editor.component.ts (99%) rename frontend/app/shared/components/{ => forms}/language-selector.component.html (100%) rename frontend/app/shared/components/{ => forms}/language-selector.component.scss (82%) rename frontend/app/shared/components/{ => forms}/language-selector.component.ts (93%) rename frontend/app/shared/components/{ => forms}/markdown-editor.component.html (100%) rename frontend/app/shared/components/{ => forms}/markdown-editor.component.scss (83%) rename frontend/app/shared/components/{ => forms}/markdown-editor.component.ts (99%) create mode 100644 frontend/app/shared/components/forms/references-dropdown.component.html create mode 100644 frontend/app/shared/components/forms/references-dropdown.component.scss rename frontend/app/shared/components/{ => forms}/references-dropdown.component.ts (91%) create mode 100644 frontend/app/shared/components/forms/references-tags.component.html create mode 100644 frontend/app/shared/components/forms/references-tags.component.scss rename frontend/app/shared/components/{ => forms}/references-tags.component.ts (92%) rename frontend/app/shared/components/{ => forms}/rich-editor.component.html (100%) rename frontend/app/shared/components/{ => forms}/rich-editor.component.scss (65%) rename frontend/app/shared/components/{ => forms}/rich-editor.component.ts (99%) delete mode 100644 frontend/app/shared/components/help.component.scss rename frontend/app/shared/components/{ => help}/help-markdown.pipe.spec.ts (100%) rename frontend/app/shared/components/{ => help}/help-markdown.pipe.ts (100%) rename frontend/app/shared/components/{ => help}/help.component.html (100%) create mode 100644 frontend/app/shared/components/help/help.component.scss rename frontend/app/shared/components/{ => help}/help.component.ts (100%) delete mode 100644 frontend/app/shared/components/history.component.scss rename frontend/app/shared/components/{ => history}/history-list.component.html (100%) rename frontend/app/shared/components/{ => history}/history-list.component.scss (91%) rename frontend/app/shared/components/{ => history}/history-list.component.ts (100%) rename frontend/app/shared/components/{ => history}/history.component.html (100%) create mode 100644 frontend/app/shared/components/history/history.component.scss rename frontend/app/shared/components/{ => history}/history.component.ts (100%) create mode 100644 frontend/app/shared/components/history/pipes.ts delete mode 100644 frontend/app/shared/components/queries/query-path.component.ts delete mode 100644 frontend/app/shared/components/saved-queries.component.ts rename frontend/app/shared/components/{ => search}/queries/filter-comparison.component.html (99%) rename frontend/app/shared/components/{ => search}/queries/filter-comparison.component.scss (60%) rename frontend/app/shared/components/{ => search}/queries/filter-comparison.component.ts (97%) rename frontend/app/shared/components/{ => search}/queries/filter-logical.component.html (98%) rename frontend/app/shared/components/{ => search}/queries/filter-logical.component.scss (93%) rename frontend/app/shared/components/{ => search}/queries/filter-logical.component.ts (97%) create mode 100644 frontend/app/shared/components/search/queries/filter-node.component.html create mode 100644 frontend/app/shared/components/search/queries/filter-node.component.scss rename frontend/app/shared/components/{ => search}/queries/filter-node.component.ts (65%) create mode 100644 frontend/app/shared/components/search/queries/query-path.component.html create mode 100644 frontend/app/shared/components/search/queries/query-path.component.scss create mode 100644 frontend/app/shared/components/search/queries/query-path.component.ts create mode 100644 frontend/app/shared/components/search/queries/query.component.html create mode 100644 frontend/app/shared/components/search/queries/query.component.scss rename frontend/app/shared/components/{ => search}/queries/query.component.ts (50%) create mode 100644 frontend/app/shared/components/search/queries/sorting.component.html create mode 100644 frontend/app/shared/components/search/queries/sorting.component.scss rename frontend/app/shared/components/{ => search}/queries/sorting.component.ts (50%) create mode 100644 frontend/app/shared/components/search/query-list.component.html create mode 100644 frontend/app/shared/components/search/query-list.component.scss create mode 100644 frontend/app/shared/components/search/query-list.component.ts rename frontend/app/shared/components/{ => search}/search-form.component.html (100%) rename frontend/app/shared/components/{ => search}/search-form.component.scss (95%) rename frontend/app/shared/components/{ => search}/search-form.component.ts (100%) create mode 100644 frontend/app/shared/components/search/shared-queries.component.html create mode 100644 frontend/app/shared/components/search/shared-queries.component.scss create mode 100644 frontend/app/shared/components/search/shared-queries.component.ts create mode 100644 frontend/app/shared/components/table-header.component.html create mode 100644 frontend/app/shared/components/table-header.component.scss create mode 100644 frontend/app/shared/state/query.spec.ts create mode 100644 frontend/app/shell/pages/forbidden/forbidden-page.component.html create mode 100644 frontend/app/shell/pages/forbidden/forbidden-page.component.scss create mode 100644 frontend/app/shell/pages/internal/logo.component.html create mode 100644 frontend/app/shell/pages/internal/logo.component.scss create mode 100644 frontend/app/shell/pages/not-found/not-found-page.component.html create mode 100644 frontend/app/shell/pages/not-found/not-found-page.component.scss create mode 100644 frontend/tsconfig.app.json create mode 100644 frontend/tsconfig.spec.json diff --git a/backend/src/Squidex/Areas/Frontend/Middlewares/WebpackMiddleware.cs b/backend/src/Squidex/Areas/Frontend/Middlewares/WebpackMiddleware.cs index 60d8d7add..e48578cd0 100644 --- a/backend/src/Squidex/Areas/Frontend/Middlewares/WebpackMiddleware.cs +++ b/backend/src/Squidex/Areas/Frontend/Middlewares/WebpackMiddleware.cs @@ -16,6 +16,7 @@ namespace Squidex.Areas.Frontend.Middlewares public sealed class WebpackMiddleware { private const string WebpackUrl = "http://localhost:3000/index.html"; + private readonly RequestDelegate next; public WebpackMiddleware(RequestDelegate next) diff --git a/frontend/app-config/webpack.config.js b/frontend/app-config/webpack.config.js index e022f7ede..f2f73a323 100644 --- a/frontend/app-config/webpack.config.js +++ b/frontend/app-config/webpack.config.js @@ -37,6 +37,8 @@ module.exports = function (env) { const isCoverage = env && env.coverage; const isAot = isProduction; + const configFile = isTests ? 'tsconfig.spec.json' : 'tsconfig.app.json'; + const config = { mode: isProduction ? 'production' : 'development', @@ -66,7 +68,9 @@ module.exports = function (env) { ], plugins: [ - new plugins.TsconfigPathsPlugin() + new plugins.TsconfigPathsPlugin({ + configFile + }) ] }, @@ -145,6 +149,10 @@ module.exports = function (env) { }, { loader: 'sass-loader', options: { + prependData: ` + @import '_vars'; + @import '_mixins'; + `, sassOptions: { includePaths: [root('app', 'theme')] } @@ -285,7 +293,7 @@ module.exports = function (env) { entryModule: 'app/app.module#AppModule', sourceMap: !isProduction, skipCodeGeneration: !isAot, - tsConfigPath: './tsconfig.json' + tsConfigPath: configFile }) ); } diff --git a/frontend/app/app.component.scss b/frontend/app/app.component.scss index fbb752506..e69de29bb 100644 --- a/frontend/app/app.component.scss +++ b/frontend/app/app.component.scss @@ -1,2 +0,0 @@ -@import '_vars'; -@import '_mixins'; \ No newline at end of file diff --git a/frontend/app/features/administration/administration-area.component.scss b/frontend/app/features/administration/administration-area.component.scss index 23f99dbeb..e69de29bb 100644 --- a/frontend/app/features/administration/administration-area.component.scss +++ b/frontend/app/features/administration/administration-area.component.scss @@ -1,2 +0,0 @@ -@import '_vars'; -@import '_mixins'; diff --git a/frontend/app/features/administration/pages/cluster/cluster-page.component.scss b/frontend/app/features/administration/pages/cluster/cluster-page.component.scss index 4ec84ebe0..8fec000ae 100644 --- a/frontend/app/features/administration/pages/cluster/cluster-page.component.scss +++ b/frontend/app/features/administration/pages/cluster/cluster-page.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - iframe { @include absolute(0, 0, 0, 0); @include force-height(100%); diff --git a/frontend/app/features/administration/pages/event-consumers/event-consumer.component.html b/frontend/app/features/administration/pages/event-consumers/event-consumer.component.html new file mode 100644 index 000000000..7cb6bc732 --- /dev/null +++ b/frontend/app/features/administration/pages/event-consumers/event-consumer.component.html @@ -0,0 +1,24 @@ + + + + + + {{eventConsumer.name}} + + + + {{eventConsumer.position}} + + + + + + + + \ No newline at end of file diff --git a/frontend/app/features/administration/pages/event-consumers/event-consumer.component.scss b/frontend/app/features/administration/pages/event-consumers/event-consumer.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/features/administration/pages/event-consumers/event-consumer.component.ts b/frontend/app/features/administration/pages/event-consumers/event-consumer.component.ts index b0029a3d3..0c10f0a23 100644 --- a/frontend/app/features/administration/pages/event-consumers/event-consumer.component.ts +++ b/frontend/app/features/administration/pages/event-consumers/event-consumer.component.ts @@ -13,32 +13,8 @@ import { EventConsumerDto, EventConsumersState } from '@app/features/administrat @Component({ selector: '[sqxEventConsumer]', - template: ` - - - - - - {{eventConsumer.name}} - - - - {{eventConsumer.position}} - - - - - - - - - `, + styleUrls: ['./event-consumer.component.scss'], + templateUrl: './event-consumer.component.html', changeDetection: ChangeDetectionStrategy.OnPush }) export class EventConsumerComponent { diff --git a/frontend/app/features/administration/pages/event-consumers/event-consumers-page.component.scss b/frontend/app/features/administration/pages/event-consumers/event-consumers-page.component.scss index 954eadba8..d95275ca7 100644 --- a/frontend/app/features/administration/pages/event-consumers/event-consumers-page.component.scss +++ b/frontend/app/features/administration/pages/event-consumers/event-consumers-page.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .faulted { & { color: $color-theme-error; diff --git a/frontend/app/features/administration/pages/restore/restore-page.component.scss b/frontend/app/features/administration/pages/restore/restore-page.component.scss index 7a16e83c5..97a5ad8c9 100644 --- a/frontend/app/features/administration/pages/restore/restore-page.component.scss +++ b/frontend/app/features/administration/pages/restore/restore-page.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - $circle-size: 2rem; h3 { diff --git a/frontend/app/features/administration/pages/users/user-page.component.scss b/frontend/app/features/administration/pages/users/user-page.component.scss index 8f81aae0d..68f973372 100644 --- a/frontend/app/features/administration/pages/users/user-page.component.scss +++ b/frontend/app/features/administration/pages/users/user-page.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .form-group-section { margin-top: 2rem; } diff --git a/frontend/app/features/administration/pages/users/user.component.html b/frontend/app/features/administration/pages/users/user.component.html new file mode 100644 index 000000000..10bbadc86 --- /dev/null +++ b/frontend/app/features/administration/pages/users/user.component.html @@ -0,0 +1,20 @@ + + + + + + {{user.displayName}} + + + {{user.email}} + + + + + + + \ No newline at end of file diff --git a/frontend/app/features/administration/pages/users/user.component.scss b/frontend/app/features/administration/pages/users/user.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/features/administration/pages/users/user.component.ts b/frontend/app/features/administration/pages/users/user.component.ts index f8a3452ce..864980464 100644 --- a/frontend/app/features/administration/pages/users/user.component.ts +++ b/frontend/app/features/administration/pages/users/user.component.ts @@ -13,28 +13,8 @@ import { UserDto, UsersState } from '@app/features/administration/internal'; @Component({ selector: '[sqxUser]', - template: ` - - - - - - {{user.displayName}} - - - {{user.email}} - - - - - - - - `, + styleUrls: ['./user.component.scss'], + templateUrl: './user.component.html', changeDetection: ChangeDetectionStrategy.OnPush }) export class UserComponent { diff --git a/frontend/app/features/administration/pages/users/users-page.component.scss b/frontend/app/features/administration/pages/users/users-page.component.scss index fbb752506..e69de29bb 100644 --- a/frontend/app/features/administration/pages/users/users-page.component.scss +++ b/frontend/app/features/administration/pages/users/users-page.component.scss @@ -1,2 +0,0 @@ -@import '_vars'; -@import '_mixins'; \ No newline at end of file diff --git a/frontend/app/features/administration/state/users.forms.ts b/frontend/app/features/administration/state/users.forms.ts index 2e2ed5ba6..6664e24b0 100644 --- a/frontend/app/features/administration/state/users.forms.ts +++ b/frontend/app/features/administration/state/users.forms.ts @@ -1,3 +1,10 @@ +/* + * Squidex Headless CMS + * + * @license + * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. + */ + import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { Form, ValidatorsEx } from '@app/shared'; diff --git a/frontend/app/features/api/api-area.component.scss b/frontend/app/features/api/api-area.component.scss index 6df2bffe7..b2868ce86 100644 --- a/frontend/app/features/api/api-area.component.scss +++ b/frontend/app/features/api/api-area.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .nav-link { padding-bottom: .6rem; padding-top: .6rem; diff --git a/frontend/app/features/api/pages/graphql/graphql-page.component.scss b/frontend/app/features/api/pages/graphql/graphql-page.component.scss index 4cebc196f..65c2f82e1 100644 --- a/frontend/app/features/api/pages/graphql/graphql-page.component.scss +++ b/frontend/app/features/api/pages/graphql/graphql-page.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - // Graphiql hints ::ng-deep { @import '~graphiql/dist/show-hint'; diff --git a/frontend/app/features/apps/pages/apps-page.component.scss b/frontend/app/features/apps/pages/apps-page.component.scss index d83f82dc7..ab35fad84 100644 --- a/frontend/app/features/apps/pages/apps-page.component.scss +++ b/frontend/app/features/apps/pages/apps-page.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .apps { &-title { font-size: 1.4rem; diff --git a/frontend/app/features/apps/pages/news-dialog.component.html b/frontend/app/features/apps/pages/news-dialog.component.html index 70c0f1625..a0b2a9bfa 100644 --- a/frontend/app/features/apps/pages/news-dialog.component.html +++ b/frontend/app/features/apps/pages/news-dialog.component.html @@ -1,4 +1,4 @@ - + New Features diff --git a/frontend/app/features/apps/pages/news-dialog.component.scss b/frontend/app/features/apps/pages/news-dialog.component.scss index 274b04219..bcc87b52b 100644 --- a/frontend/app/features/apps/pages/news-dialog.component.scss +++ b/frontend/app/features/apps/pages/news-dialog.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - :host ::ng-deep { img { @include box-shadow(0, 4px, 20px, .2); diff --git a/frontend/app/features/apps/pages/news-dialog.component.ts b/frontend/app/features/apps/pages/news-dialog.component.ts index 5683be87b..6ffeff783 100644 --- a/frontend/app/features/apps/pages/news-dialog.component.ts +++ b/frontend/app/features/apps/pages/news-dialog.component.ts @@ -21,10 +21,6 @@ export class NewsDialogComponent { @Input() public features: ReadonlyArray; - public emitClose() { - this.close.emit(); - } - public trackByFeature(index: number, feature: FeatureDto) { return feature; } diff --git a/frontend/app/features/apps/pages/onboarding-dialog.component.html b/frontend/app/features/apps/pages/onboarding-dialog.component.html index dce2eaed4..9c9996613 100644 --- a/frontend/app/features/apps/pages/onboarding-dialog.component.html +++ b/frontend/app/features/apps/pages/onboarding-dialog.component.html @@ -1,6 +1,6 @@ - Skip Tour + Skip Tour
diff --git a/frontend/app/features/apps/pages/onboarding-dialog.component.scss b/frontend/app/features/apps/pages/onboarding-dialog.component.scss index 6a55f8584..2771a5399 100644 --- a/frontend/app/features/apps/pages/onboarding-dialog.component.scss +++ b/frontend/app/features/apps/pages/onboarding-dialog.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - $size-width: 825px; $size-height: 576px; diff --git a/frontend/app/features/apps/pages/onboarding-dialog.component.ts b/frontend/app/features/apps/pages/onboarding-dialog.component.ts index 9d2ea10f6..53fe2a8d7 100644 --- a/frontend/app/features/apps/pages/onboarding-dialog.component.ts +++ b/frontend/app/features/apps/pages/onboarding-dialog.component.ts @@ -23,10 +23,6 @@ export class OnboardingDialogComponent { @Output() public close = new EventEmitter(); - public emitClose() { - this.close.emit(); - } - public next() { this.step = this.step + 1; } diff --git a/frontend/app/features/assets/declarations.ts b/frontend/app/features/assets/declarations.ts index 317f83e41..365980ef5 100644 --- a/frontend/app/features/assets/declarations.ts +++ b/frontend/app/features/assets/declarations.ts @@ -6,4 +6,5 @@ */ export * from './pages/assets-filters-page.component'; -export * from './pages/assets-page.component'; \ No newline at end of file +export * from './pages/assets-page.component'; +export * from './pages/asset-tags.component'; \ No newline at end of file diff --git a/frontend/app/features/assets/module.ts b/frontend/app/features/assets/module.ts index bcfb24292..0b65d9fe4 100644 --- a/frontend/app/features/assets/module.ts +++ b/frontend/app/features/assets/module.ts @@ -12,7 +12,8 @@ import { SqxFrameworkModule, SqxSharedModule } from '@app/shared'; import { AssetsFiltersPageComponent, - AssetsPageComponent + AssetsPageComponent, + AssetTagsComponent } from './declarations'; const routes: Routes = [ @@ -36,7 +37,8 @@ const routes: Routes = [ ], declarations: [ AssetsFiltersPageComponent, - AssetsPageComponent + AssetsPageComponent, + AssetTagsComponent ] }) export class SqxFeatureAssetsModule {} \ No newline at end of file diff --git a/frontend/app/features/assets/pages/asset-tags.component.html b/frontend/app/features/assets/pages/asset-tags.component.html new file mode 100644 index 000000000..2db48178b --- /dev/null +++ b/frontend/app/features/assets/pages/asset-tags.component.html @@ -0,0 +1,18 @@ + +
+
+ All tags +
+
+
+ + +
+
+ {{tag.name}} +
+
+ {{tag.count}} +
+
+
\ No newline at end of file diff --git a/frontend/app/features/assets/pages/asset-tags.component.scss b/frontend/app/features/assets/pages/asset-tags.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/features/assets/pages/asset-tags.component.ts b/frontend/app/features/assets/pages/asset-tags.component.ts new file mode 100644 index 000000000..f011ad8b4 --- /dev/null +++ b/frontend/app/features/assets/pages/asset-tags.component.ts @@ -0,0 +1,42 @@ +/* + * Squidex Headless CMS + * + * @license + * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. + */ + +import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'; + +import { Tag, TagsSelected } from '@app/shared'; + +@Component({ + selector: 'sqx-asset-tags', + styleUrls: ['./asset-tags.component.scss'], + templateUrl: './asset-tags.component.html', + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class AssetTagsComponent { + @Output() + public reset = new EventEmitter(); + + @Output() + public toggle = new EventEmitter(); + + @Input() + public tags: ReadonlyArray; + + @Input() + public tagsSelected: TagsSelected; + + public isEmpty() { + return Object.keys(this.tagsSelected).length === 0; + } + + public isSelected(tag: Tag) { + return this.tagsSelected[tag.name] === true; + } + + public trackByTag(index: number, tag: Tag) { + return tag.name; + } +} \ No newline at end of file diff --git a/frontend/app/features/assets/pages/assets-filters-page.component.html b/frontend/app/features/assets/pages/assets-filters-page.component.html index f3782afbe..917ecfc8d 100644 --- a/frontend/app/features/assets/pages/assets-filters-page.component.html +++ b/frontend/app/features/assets/pages/assets-filters-page.component.html @@ -6,32 +6,19 @@

Tags

- -
-
- All tags -
-
-
- - -
-
- {{tag.name}} -
-
- {{tag.count}} -
-
-
+ +
+ (search)="search($event)">
\ No newline at end of file diff --git a/frontend/app/features/assets/pages/assets-filters-page.component.scss b/frontend/app/features/assets/pages/assets-filters-page.component.scss index fbb752506..e69de29bb 100644 --- a/frontend/app/features/assets/pages/assets-filters-page.component.scss +++ b/frontend/app/features/assets/pages/assets-filters-page.component.scss @@ -1,2 +0,0 @@ -@import '_vars'; -@import '_mixins'; \ No newline at end of file diff --git a/frontend/app/features/assets/pages/assets-filters-page.component.ts b/frontend/app/features/assets/pages/assets-filters-page.component.ts index a1f6c576c..2435d4159 100644 --- a/frontend/app/features/assets/pages/assets-filters-page.component.ts +++ b/frontend/app/features/assets/pages/assets-filters-page.component.ts @@ -11,7 +11,6 @@ import { AssetsState, Queries, Query, - SavedQuery, UIState } from '@app/shared'; @@ -29,10 +28,6 @@ export class AssetsFiltersPageComponent { ) { } - public isQueryUsed = (query: SavedQuery) => { - return this.assetsState.isQueryUsed(query); - } - public search(query: Query) { this.assetsState.search(query); } diff --git a/frontend/app/features/assets/pages/assets-page.component.scss b/frontend/app/features/assets/pages/assets-page.component.scss index 5976607b7..4be6c4e55 100644 --- a/frontend/app/features/assets/pages/assets-page.component.scss +++ b/frontend/app/features/assets/pages/assets-page.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .search ::ng-deep { .form-control { @include border-radius-right; diff --git a/frontend/app/features/content/declarations.ts b/frontend/app/features/content/declarations.ts index 0dff4286a..b0c8fee37 100644 --- a/frontend/app/features/content/declarations.ts +++ b/frontend/app/features/content/declarations.ts @@ -15,21 +15,24 @@ export * from './pages/contents/contents-page.component'; export * from './pages/contents/custom-view-editor.component'; export * from './pages/schemas/schemas-page.component'; -export * from './shared/array-editor.component'; -export * from './shared/array-item.component'; -export * from './shared/assets-editor.component'; -export * from './shared/content-list-cell.directive'; -export * from './shared/content-list-field.component'; -export * from './shared/content-list-header.component'; -export * from './shared/content-selector-item.component'; export * from './shared/content-status.component'; -export * from './shared/content-value-editor.component'; -export * from './shared/content-value.component'; -export * from './shared/content.component'; -export * from './shared/contents-selector.component'; export * from './shared/due-time-selector.component'; -export * from './shared/field-editor.component'; export * from './shared/preview-button.component'; -export * from './shared/reference-item.component'; -export * from './shared/references-editor.component'; -export * from './shared/stock-photo-editor.component'; \ No newline at end of file + +export * from './shared/forms/array-editor.component'; +export * from './shared/forms/array-item.component'; +export * from './shared/forms/assets-editor.component'; +export * from './shared/forms/field-editor.component'; +export * from './shared/forms/stock-photo-editor.component'; + +export * from './shared/list/content-list-cell.directive'; +export * from './shared/list/content-list-field.component'; +export * from './shared/list/content-list-header.component'; +export * from './shared/list/content-value-editor.component'; +export * from './shared/list/content-value.component'; +export * from './shared/list/content.component'; + +export * from './shared/references/content-selector-item.component'; +export * from './shared/references/content-selector.component'; +export * from './shared/references/reference-item.component'; +export * from './shared/references/references-editor.component'; \ No newline at end of file diff --git a/frontend/app/features/content/module.ts b/frontend/app/features/content/module.ts index 5e89aae4c..c1bcbd580 100644 --- a/frontend/app/features/content/module.ts +++ b/frontend/app/features/content/module.ts @@ -32,10 +32,10 @@ import { ContentListHeaderComponent, ContentListWidthPipe, ContentPageComponent, + ContentSelectorComponent, ContentSelectorItemComponent, ContentsFiltersPageComponent, ContentsPageComponent, - ContentsSelectorComponent, ContentStatusComponent, ContentValueComponent, ContentValueEditorComponent, @@ -118,16 +118,16 @@ const routes: Routes = [ CommentsPageComponent, ContentComponent, ContentFieldComponent, + ContentHistoryPageComponent, ContentListCellDirective, - ContentListWidthPipe, ContentListFieldComponent, ContentListHeaderComponent, - ContentHistoryPageComponent, + ContentListWidthPipe, ContentPageComponent, + ContentSelectorComponent, ContentSelectorItemComponent, ContentsFiltersPageComponent, ContentsPageComponent, - ContentsSelectorComponent, ContentStatusComponent, ContentValueComponent, ContentValueEditorComponent, diff --git a/frontend/app/features/content/pages/comments/comments-page.component.scss b/frontend/app/features/content/pages/comments/comments-page.component.scss index 23f99dbeb..e69de29bb 100644 --- a/frontend/app/features/content/pages/comments/comments-page.component.scss +++ b/frontend/app/features/content/pages/comments/comments-page.component.scss @@ -1,2 +0,0 @@ -@import '_vars'; -@import '_mixins'; diff --git a/frontend/app/features/content/pages/content/content-field.component.html b/frontend/app/features/content/pages/content/content-field.component.html index 034c25fdb..970faac5e 100644 --- a/frontend/app/features/content/pages/content/content-field.component.html +++ b/frontend/app/features/content/pages/content/content-field.component.html @@ -9,7 +9,7 @@ @@ -67,7 +67,7 @@ diff --git a/frontend/app/features/content/pages/content/content-field.component.scss b/frontend/app/features/content/pages/content/content-field.component.scss index 28167804c..338171a33 100644 --- a/frontend/app/features/content/pages/content/content-field.component.scss +++ b/frontend/app/features/content/pages/content/content-field.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .table-items-row { border-left-width: 4px; position: relative; diff --git a/frontend/app/features/content/pages/content/content-field.component.ts b/frontend/app/features/content/pages/content/content-field.component.ts index cb6dec4b6..44343aa8d 100644 --- a/frontend/app/features/content/pages/content/content-field.component.ts +++ b/frontend/app/features/content/pages/content/content-field.component.ts @@ -90,7 +90,7 @@ export class ContentFieldComponent implements DoCheck, OnChanges { this.isDifferent = value$(this.fieldForm).pipe( combineLatest(value$(this.fieldFormCompare), - (lhs, rhs) => !Types.jsJsonEquals(lhs, rhs))); + (lhs, rhs) => !Types.equals(lhs, rhs))); } } @@ -184,10 +184,6 @@ export class ContentFieldComponent implements DoCheck, OnChanges { } } - public emitLanguageChange(language: AppLanguageDto) { - this.languageChange.emit(language); - } - public prefix(language: AppLanguageDto) { return `(${language.iso2Code})`; } diff --git a/frontend/app/features/content/pages/content/content-history-page.component.scss b/frontend/app/features/content/pages/content/content-history-page.component.scss index 4ad344afa..c8b4c3272 100644 --- a/frontend/app/features/content/pages/content/content-history-page.component.scss +++ b/frontend/app/features/content/pages/content/content-history-page.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - :host ::ng-deep { .user-ref { font-weight: 500; diff --git a/frontend/app/features/content/pages/content/content-page.component.scss b/frontend/app/features/content/pages/content/content-page.component.scss index c89a1b370..e639f7c75 100644 --- a/frontend/app/features/content/pages/content/content-page.component.scss +++ b/frontend/app/features/content/pages/content/content-page.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .btn-status { margin-left: 2rem; } \ No newline at end of file diff --git a/frontend/app/features/content/pages/content/field-languages.component.html b/frontend/app/features/content/pages/content/field-languages.component.html new file mode 100644 index 000000000..b651ab7e5 --- /dev/null +++ b/frontend/app/features/content/pages/content/field-languages.component.html @@ -0,0 +1,17 @@ + + + + + + + + + Please remember to check all languages when you see validation errors. + + + \ No newline at end of file diff --git a/frontend/app/features/content/pages/content/field-languages.component.scss b/frontend/app/features/content/pages/content/field-languages.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/features/content/pages/content/field-languages.component.ts b/frontend/app/features/content/pages/content/field-languages.component.ts index 57f58868b..90c3a071b 100644 --- a/frontend/app/features/content/pages/content/field-languages.component.ts +++ b/frontend/app/features/content/pages/content/field-languages.component.ts @@ -11,43 +11,30 @@ import { AppLanguageDto, RootFieldDto } from '@app/shared'; @Component({ selector: 'sqx-field-languages', - template: ` - - - - - - - - - Please remember to check all languages when you see validation errors. - - - - `, + styleUrls: ['./field-languages.component.scss'], + templateUrl: './field-languages.component.html', changeDetection: ChangeDetectionStrategy.OnPush }) export class FieldLanguagesComponent { - @Output() - public languageChange = new EventEmitter(); - @Output() public showAllControlsChange = new EventEmitter(); - @Input() - public field: RootFieldDto; - @Input() public showAllControls: boolean; + @Output() + public languageChange = new EventEmitter(); + @Input() public language: AppLanguageDto; @Input() public languages: ReadonlyArray; + + @Input() + public field: RootFieldDto; + + public toggleShowAllControls() { + this.showAllControlsChange.emit(this.showAllControls); + } } \ No newline at end of file diff --git a/frontend/app/features/content/pages/contents/contents-filters-page.component.html b/frontend/app/features/content/pages/contents/contents-filters-page.component.html index 3cf873ff7..93ef1ba82 100644 --- a/frontend/app/features/content/pages/contents/contents-filters-page.component.html +++ b/frontend/app/features/content/pages/contents/contents-filters-page.component.html @@ -4,29 +4,30 @@ - - {{default.name}} - + +

+ (search)="search($event)">
\ No newline at end of file diff --git a/frontend/app/features/content/pages/contents/contents-filters-page.component.scss b/frontend/app/features/content/pages/contents/contents-filters-page.component.scss index d2ed5db4c..d010862a6 100644 --- a/frontend/app/features/content/pages/contents/contents-filters-page.component.scss +++ b/frontend/app/features/content/pages/contents/contents-filters-page.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .status { @include truncate; } \ No newline at end of file diff --git a/frontend/app/features/content/pages/contents/contents-filters-page.component.ts b/frontend/app/features/content/pages/contents/contents-filters-page.component.ts index 7a5afb66c..8432c095b 100644 --- a/frontend/app/features/content/pages/contents/contents-filters-page.component.ts +++ b/frontend/app/features/content/pages/contents/contents-filters-page.component.ts @@ -12,7 +12,6 @@ import { Queries, Query, ResourceOwner, - SavedQuery, SchemasState, UIState } from '@app/shared'; @@ -41,15 +40,7 @@ export class ContentsFiltersPageComponent extends ResourceOwner implements OnIni })); } - public isQueryUsed = (query: SavedQuery) => { - return this.contentsState.isQueryUsed(query); - } - public search(query: Query) { this.contentsState.search(query); } - - public trackByQuery(index: number, query: { name: string }) { - return query.name; - } } \ No newline at end of file diff --git a/frontend/app/features/content/pages/contents/contents-page.component.scss b/frontend/app/features/content/pages/contents/contents-page.component.scss index 8cd27279f..97f69b49c 100644 --- a/frontend/app/features/content/pages/contents/contents-page.component.scss +++ b/frontend/app/features/content/pages/contents/contents-page.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .content { cursor: pointer; } @@ -27,6 +24,7 @@ &-button { @include absolute(null, 1rem, -2.375rem); + z-index: 1000; } } diff --git a/frontend/app/features/content/pages/contents/custom-view-editor.component.html b/frontend/app/features/content/pages/contents/custom-view-editor.component.html index 7694e2233..44bf8b6f1 100644 --- a/frontend/app/features/content/pages/contents/custom-view-editor.component.html +++ b/frontend/app/features/content/pages/contents/custom-view-editor.component.html @@ -7,16 +7,16 @@
-
-
+
- + @@ -31,7 +31,7 @@
- + diff --git a/frontend/app/features/content/pages/contents/custom-view-editor.component.scss b/frontend/app/features/content/pages/contents/custom-view-editor.component.scss index 40149ec7f..9f16730f8 100644 --- a/frontend/app/features/content/pages/contents/custom-view-editor.component.scss +++ b/frontend/app/features/content/pages/contents/custom-view-editor.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .container { max-height: 400px; overflow-x: hidden; diff --git a/frontend/app/features/content/pages/contents/custom-view-editor.component.ts b/frontend/app/features/content/pages/contents/custom-view-editor.component.ts index 44fa1c0bd..a21df2f08 100644 --- a/frontend/app/features/content/pages/contents/custom-view-editor.component.ts +++ b/frontend/app/features/content/pages/contents/custom-view-editor.component.ts @@ -17,14 +17,14 @@ import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, Out changeDetection: ChangeDetectionStrategy.OnPush }) export class CustomViewEditorComponent implements OnChanges { - @Input() - public allFields: ReadonlyArray; + @Output() + public fieldNamesChange = new EventEmitter>(); @Input() public fieldNames: ReadonlyArray; - @Output() - public fieldNamesChange = new EventEmitter>(); + @Input() + public allFields: ReadonlyArray; public fieldsNotAdded: ReadonlyArray; @@ -32,29 +32,25 @@ export class CustomViewEditorComponent implements OnChanges { this.fieldsNotAdded = this.allFields.filter(n => this.fieldNames.indexOf(n) < 0); } - public random() { - return Math.random(); - } - public drop(event: CdkDragDrop) { moveItemInArray(event.container.data, event.previousIndex, event.currentIndex); - this.updateFields(event.container.data); - } - - public updateFields(fieldNames: ReadonlyArray) { - this.fieldNamesChange.emit(fieldNames); + this.updateFieldNames(event.container.data); } public resetDefault() { - this.updateFields([]); + this.updateFieldNames([]); } public addField(field: string) { - this.updateFields([...this.fieldNames, field]); + this.updateFieldNames([...this.fieldNames, field]); } public removeField(field: string) { - this.updateFields(this.fieldNames.filter(x => x !== field)); + this.updateFieldNames(this.fieldNames.filter(x => x !== field)); + } + + private updateFieldNames(fieldNames: ReadonlyArray) { + this.fieldNamesChange.emit(fieldNames); } } \ No newline at end of file diff --git a/frontend/app/features/content/pages/schemas/schemas-page.component.scss b/frontend/app/features/content/pages/schemas/schemas-page.component.scss index a54223a3d..b0392cfd1 100644 --- a/frontend/app/features/content/pages/schemas/schemas-page.component.scss +++ b/frontend/app/features/content/pages/schemas/schemas-page.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .btn-collapse { & { font-size: 1.2rem; diff --git a/frontend/app/features/content/shared/content-list-field.component.ts b/frontend/app/features/content/shared/content-list-field.component.ts deleted file mode 100644 index c419be5f3..000000000 --- a/frontend/app/features/content/shared/content-list-field.component.ts +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Squidex Headless CMS - * - * @license - * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. - */ - -import { ChangeDetectionStrategy, Component, Input, OnChanges } from '@angular/core'; -import { FormGroup } from '@angular/forms'; - -import { - ContentDto, - getContentValue, - LanguageDto, - MetaFields, - RootFieldDto, - TableField, - Types -} from '@app/shared'; - -@Component({ - selector: 'sqx-content-list-field', - template: ` - - - {{content.id}} - - - {{content.created | sqxFromNow}} - - - - - - {{content.createdBy | sqxUserNameRef}} - - - {{content.lastModified | sqxFromNow}} - - - - - - {{content.lastModifiedBy | sqxUserNameRef}} - - - - - - - {{content.status}} - - - - - {{job.status}} at {{job.dueTime | sqxShortDate}} - - - - - - - - {{content.version.value}} - - - - - - - - - - - - `, - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class ContentListFieldComponent implements OnChanges { - @Input() - public field: TableField; - - @Input() - public content: ContentDto; - - @Input() - public patchAllowed: boolean; - - @Input() - public patchForm: FormGroup; - - @Input() - public language: LanguageDto; - - public value: any; - - public ngOnChanges() { - this.reset(); - } - - public reset() { - if (Types.is(this.field, RootFieldDto)) { - const { value, formatted } = getContentValue(this.content, this.language, this.field); - - if (this.patchForm) { - const formControl = this.patchForm.controls[this.field.name]; - - if (formControl) { - formControl.setValue(value); - } - } - - this.value = formatted; - } - } - - public get metaFields() { - return MetaFields; - } - - public get isInlineEditable() { - return Types.is(this.field, RootFieldDto) ? this.field.isInlineEditable : false; - } - - public get fieldName() { - return Types.is(this.field, RootFieldDto) ? this.field.name : this.field; - } -} \ No newline at end of file diff --git a/frontend/app/features/content/shared/content-list-header.component.ts b/frontend/app/features/content/shared/content-list-header.component.ts deleted file mode 100644 index e35e31b72..000000000 --- a/frontend/app/features/content/shared/content-list-header.component.ts +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Squidex Headless CMS - * - * @license - * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. - */ - -import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'; - -import { - LanguageDto, - MetaFields, - Query, - RootFieldDto, - TableField, - Types -} from '@app/shared'; - -@Component({ - selector: 'sqx-content-list-header', - template: ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - `, - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class ContentListHeaderComponent { - @Input() - public field: TableField; - - @Output() - public queryChange = new EventEmitter(); - - @Input() - public query: Query; - - @Input() - public language: LanguageDto; - - public get metaFields() { - return MetaFields; - } - - public get isSortable() { - return Types.is(this.field, RootFieldDto) ? this.field.properties.isSortable : false; - } - - public get fieldName() { - return Types.is(this.field, RootFieldDto) ? this.field.name : this.field; - } - - public get fieldDisplayName() { - return Types.is(this.field, RootFieldDto) ? this.field.displayName : ''; - } - - public get fieldPath() { - if (Types.isString(this.field)) { - return this.field; - } else if (this.field.isLocalizable && this.language) { - return `data.${this.field.name}.${this.language.iso2Code}`; - } else { - return `data.${this.field.name}.iv`; - } - } -} \ No newline at end of file diff --git a/frontend/app/features/content/shared/content-selector-item.component.ts b/frontend/app/features/content/shared/content-selector-item.component.ts deleted file mode 100644 index ba882ba56..000000000 --- a/frontend/app/features/content/shared/content-selector-item.component.ts +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Squidex Headless CMS - * - * @license - * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. - */ - -import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'; - -import { - ContentDto, - LanguageDto, - SchemaDetailsDto -} from '@app/shared'; - -/* tslint:disable:component-selector */ - -@Component({ - selector: '[sqxContentSelectorItem]', - template: ` - - - - - - - - - - - - - - - `, - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class ContentSelectorItemComponent { - @Output() - public selectedChange = new EventEmitter(); - - @Input() - public selected = false; - - @Input() - public selectable = true; - - @Input() - public language: LanguageDto; - - @Input() - public schema: SchemaDetailsDto; - - @Input('sqxContentSelectorItem') - public content: ContentDto; - - public toggle() { - if (this.selectable) { - this.emitSelectedChange(!this.selected); - } - } - - public emitSelectedChange(isSelected: boolean) { - this.selectedChange.emit(isSelected); - } -} \ No newline at end of file diff --git a/frontend/app/features/content/shared/content-status.component.scss b/frontend/app/features/content/shared/content-status.component.scss index 1d78232ef..d7ea4cbbd 100644 --- a/frontend/app/features/content/shared/content-status.component.scss +++ b/frontend/app/features/content/shared/content-status.component.scss @@ -1,5 +1,3 @@ -@import '_vars'; -@import '_mixins'; .content-status { &.default { diff --git a/frontend/app/features/content/shared/content-value-editor.component.ts b/frontend/app/features/content/shared/content-value-editor.component.ts deleted file mode 100644 index 7e50ea128..000000000 --- a/frontend/app/features/content/shared/content-value-editor.component.ts +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Squidex Headless CMS - * - * @license - * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. - */ - -import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; -import { FormGroup } from '@angular/forms'; - -import { FieldDto } from '@app/shared'; - -@Component({ - selector: 'sqx-content-value-editor', - template: ` -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- `, - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class ContentValueEditorComponent { - @Input() - public field: FieldDto; - - @Input() - public form: FormGroup; -} \ No newline at end of file diff --git a/frontend/app/features/content/shared/content-value.component.ts b/frontend/app/features/content/shared/content-value.component.ts deleted file mode 100644 index 2ef4f9d47..000000000 --- a/frontend/app/features/content/shared/content-value.component.ts +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Squidex Headless CMS - * - * @license - * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. - */ - -import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; - -import { HtmlValue, Types } from '@app/shared'; - -@Component({ - selector: 'sqx-content-value', - template: ` - - {{value}} - - - - - `, - styles: [` - .html-value { - position: relative; - } - ::ng-deep .html-value img { - position: absolute; - min-height: 50px; - max-height: 50px; - margin-top: -25px; - }` - ], - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class ContentValueComponent { - @Input() - public value: any; - - public get isPlain() { - return !Types.is(this.value, HtmlValue); - } -} \ No newline at end of file diff --git a/frontend/app/features/content/shared/due-time-selector.component.scss b/frontend/app/features/content/shared/due-time-selector.component.scss index fbb752506..e69de29bb 100644 --- a/frontend/app/features/content/shared/due-time-selector.component.scss +++ b/frontend/app/features/content/shared/due-time-selector.component.scss @@ -1,2 +0,0 @@ -@import '_vars'; -@import '_mixins'; \ No newline at end of file diff --git a/frontend/app/features/content/shared/due-time-selector.component.ts b/frontend/app/features/content/shared/due-time-selector.component.ts index 80bb89d6b..c91a08a41 100644 --- a/frontend/app/features/content/shared/due-time-selector.component.ts +++ b/frontend/app/features/content/shared/due-time-selector.component.ts @@ -16,25 +16,26 @@ import { DialogModel } from '@app/shared'; templateUrl: './due-time-selector.component.html' }) export class DueTimeSelectorComponent { + private dueTimeResult: Subject; + public dueTimeDialog = new DialogModel(); public dueTime: string | null = ''; - public dueTimeFunction: Subject; public dueTimeAction: string | null = ''; public dueTimeMode = 'Immediately'; public selectDueTime(action: string): Observable { this.dueTimeAction = action; - this.dueTimeFunction = new Subject(); + this.dueTimeResult = new Subject(); this.dueTimeDialog.show(); - return this.dueTimeFunction; + return this.dueTimeResult; } public confirmStatusChange() { const result = this.dueTimeMode === 'Immediately' ? null : this.dueTime; - this.dueTimeFunction.next(result); - this.dueTimeFunction.complete(); + this.dueTimeResult.next(result); + this.dueTimeResult.complete(); this.cancelStatusChange(); } @@ -42,7 +43,7 @@ export class DueTimeSelectorComponent { public cancelStatusChange() { this.dueTimeMode = 'Immediately'; this.dueTimeDialog.hide(); - this.dueTimeFunction = null!; + this.dueTimeResult = null!; this.dueTime = null; } } \ No newline at end of file diff --git a/frontend/app/features/content/shared/array-editor.component.html b/frontend/app/features/content/shared/forms/array-editor.component.html similarity index 100% rename from frontend/app/features/content/shared/array-editor.component.html rename to frontend/app/features/content/shared/forms/array-editor.component.html diff --git a/frontend/app/features/content/shared/array-editor.component.scss b/frontend/app/features/content/shared/forms/array-editor.component.scss similarity index 82% rename from frontend/app/features/content/shared/array-editor.component.scss rename to frontend/app/features/content/shared/forms/array-editor.component.scss index b08fbfc17..7eae62567 100644 --- a/frontend/app/features/content/shared/array-editor.component.scss +++ b/frontend/app/features/content/shared/forms/array-editor.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .array-container { background: $color-border; margin-bottom: 1rem; diff --git a/frontend/app/features/content/shared/array-editor.component.ts b/frontend/app/features/content/shared/forms/array-editor.component.ts similarity index 100% rename from frontend/app/features/content/shared/array-editor.component.ts rename to frontend/app/features/content/shared/forms/array-editor.component.ts diff --git a/frontend/app/features/content/shared/array-item.component.html b/frontend/app/features/content/shared/forms/array-item.component.html similarity index 86% rename from frontend/app/features/content/shared/array-item.component.html rename to frontend/app/features/content/shared/forms/array-item.component.html index b04a064d6..f440c1e20 100644 --- a/frontend/app/features/content/shared/array-item.component.html +++ b/frontend/app/features/content/shared/forms/array-item.component.html @@ -11,16 +11,16 @@
- - - -
- -
diff --git a/frontend/app/features/content/shared/array-item.component.scss b/frontend/app/features/content/shared/forms/array-item.component.scss similarity index 94% rename from frontend/app/features/content/shared/array-item.component.scss rename to frontend/app/features/content/shared/forms/array-item.component.scss index f07387916..c77818339 100644 --- a/frontend/app/features/content/shared/array-item.component.scss +++ b/frontend/app/features/content/shared/forms/array-item.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - :host ::ng-deep { .ui-separator { border-color: $color-border !important; diff --git a/frontend/app/features/content/shared/array-item.component.ts b/frontend/app/features/content/shared/forms/array-item.component.ts similarity index 94% rename from frontend/app/features/content/shared/array-item.component.ts rename to frontend/app/features/content/shared/forms/array-item.component.ts index 88ba73fbd..1feaee056 100644 --- a/frontend/app/features/content/shared/array-item.component.ts +++ b/frontend/app/features/content/shared/forms/array-item.component.ts @@ -155,27 +155,19 @@ export class ArrayItemComponent implements OnChanges, OnDestroy { this.changeDetector.markForCheck(); } - public emitClone() { - this.clone.emit(); - } - - public emitRemove() { - this.remove.emit(); - } - - public emitMoveTop() { + public moveTop() { this.move.emit(0); } - public emitMoveUp() { + public moveUp() { this.move.emit(this.index - 1); } - public emitMoveDown() { + public moveDown() { this.move.emit(this.index + 1); } - public emitMoveBottom() { + public moveBottom() { this.move.emit(99999); } diff --git a/frontend/app/features/content/shared/assets-editor.component.html b/frontend/app/features/content/shared/forms/assets-editor.component.html similarity index 100% rename from frontend/app/features/content/shared/assets-editor.component.html rename to frontend/app/features/content/shared/forms/assets-editor.component.html diff --git a/frontend/app/features/content/shared/assets-editor.component.scss b/frontend/app/features/content/shared/forms/assets-editor.component.scss similarity index 96% rename from frontend/app/features/content/shared/assets-editor.component.scss rename to frontend/app/features/content/shared/forms/assets-editor.component.scss index 6734b4757..86fc2ead1 100644 --- a/frontend/app/features/content/shared/assets-editor.component.scss +++ b/frontend/app/features/content/shared/forms/assets-editor.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .disabled { pointer-events: none; } diff --git a/frontend/app/features/content/shared/assets-editor.component.ts b/frontend/app/features/content/shared/forms/assets-editor.component.ts similarity index 95% rename from frontend/app/features/content/shared/assets-editor.component.ts rename to frontend/app/features/content/shared/forms/assets-editor.component.ts index db7935fcf..b7e81eaf6 100644 --- a/frontend/app/features/content/shared/assets-editor.component.ts +++ b/frontend/app/features/content/shared/forms/assets-editor.component.ts @@ -45,11 +45,12 @@ interface State { selector: 'sqx-assets-editor', styleUrls: ['./assets-editor.component.scss'], templateUrl: './assets-editor.component.html', - providers: [SQX_ASSETS_EDITOR_CONTROL_VALUE_ACCESSOR], + providers: [ + SQX_ASSETS_EDITOR_CONTROL_VALUE_ACCESSOR + ], changeDetection: ChangeDetectionStrategy.OnPush }) -// tslint:disable-next-line: readonly-array -export class AssetsEditorComponent extends StatefulControlComponent implements OnInit { +export class AssetsEditorComponent extends StatefulControlComponent> implements OnInit { @Input() public isCompact = false; @@ -70,7 +71,7 @@ export class AssetsEditorComponent extends StatefulControlComponent x.id))) { + if (!Types.equals(obj, this.snapshot.assets.map(x => x.id))) { const assetIds: string[] = obj; this.assetsService.getAssets(this.appsState.appName, 0, 0, undefined, undefined, obj) diff --git a/frontend/app/features/content/shared/field-editor.component.html b/frontend/app/features/content/shared/forms/field-editor.component.html similarity index 100% rename from frontend/app/features/content/shared/field-editor.component.html rename to frontend/app/features/content/shared/forms/field-editor.component.html diff --git a/frontend/app/features/content/shared/field-editor.component.scss b/frontend/app/features/content/shared/forms/field-editor.component.scss similarity index 92% rename from frontend/app/features/content/shared/field-editor.component.scss rename to frontend/app/features/content/shared/forms/field-editor.component.scss index f363be204..907653b31 100644 --- a/frontend/app/features/content/shared/field-editor.component.scss +++ b/frontend/app/features/content/shared/forms/field-editor.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .field { &-required { color: $color-theme-error; diff --git a/frontend/app/features/content/shared/field-editor.component.ts b/frontend/app/features/content/shared/forms/field-editor.component.ts similarity index 100% rename from frontend/app/features/content/shared/field-editor.component.ts rename to frontend/app/features/content/shared/forms/field-editor.component.ts diff --git a/frontend/app/features/content/shared/stock-photo-editor.component.html b/frontend/app/features/content/shared/forms/stock-photo-editor.component.html similarity index 100% rename from frontend/app/features/content/shared/stock-photo-editor.component.html rename to frontend/app/features/content/shared/forms/stock-photo-editor.component.html diff --git a/frontend/app/features/content/shared/stock-photo-editor.component.scss b/frontend/app/features/content/shared/forms/stock-photo-editor.component.scss similarity index 97% rename from frontend/app/features/content/shared/stock-photo-editor.component.scss rename to frontend/app/features/content/shared/forms/stock-photo-editor.component.scss index 2cdc7af75..dd568d8e6 100644 --- a/frontend/app/features/content/shared/stock-photo-editor.component.scss +++ b/frontend/app/features/content/shared/forms/stock-photo-editor.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - $color-user-background: rgba(0, 0, 0, .5); $color-background: #000; diff --git a/frontend/app/features/content/shared/stock-photo-editor.component.ts b/frontend/app/features/content/shared/forms/stock-photo-editor.component.ts similarity index 97% rename from frontend/app/features/content/shared/stock-photo-editor.component.ts rename to frontend/app/features/content/shared/forms/stock-photo-editor.component.ts index 8a7fe090d..53eaf9a42 100644 --- a/frontend/app/features/content/shared/stock-photo-editor.component.ts +++ b/frontend/app/features/content/shared/forms/stock-photo-editor.component.ts @@ -30,7 +30,9 @@ export const SQX_STOCK_PHOTO_EDITOR_CONTROL_VALUE_ACCESSOR: any = { selector: 'sqx-stock-photo-editor', styleUrls: ['./stock-photo-editor.component.scss'], templateUrl: './stock-photo-editor.component.html', - providers: [SQX_STOCK_PHOTO_EDITOR_CONTROL_VALUE_ACCESSOR], + providers: [ + SQX_STOCK_PHOTO_EDITOR_CONTROL_VALUE_ACCESSOR + ], changeDetection: ChangeDetectionStrategy.OnPush }) export class StockPhotoEditorComponent extends StatefulControlComponent implements OnInit { diff --git a/frontend/app/features/content/shared/content-list-cell.directive.ts b/frontend/app/features/content/shared/list/content-list-cell.directive.ts similarity index 100% rename from frontend/app/features/content/shared/content-list-cell.directive.ts rename to frontend/app/features/content/shared/list/content-list-cell.directive.ts diff --git a/frontend/app/features/content/shared/list/content-list-field.component.html b/frontend/app/features/content/shared/list/content-list-field.component.html new file mode 100644 index 000000000..917135d06 --- /dev/null +++ b/frontend/app/features/content/shared/list/content-list-field.component.html @@ -0,0 +1,62 @@ + + + {{content.id}} + + + {{content.created | sqxFromNow}} + + + + + + {{content.createdBy | sqxUserNameRef}} + + + {{content.lastModified | sqxFromNow}} + + + + + + {{content.lastModifiedBy | sqxUserNameRef}} + + + + + + + {{content.status}} + + + + + {{content.scheduleJob.status}} at {{content.scheduleJob.dueTime | sqxShortDate}} + + + + + + + + {{content.version.value}} + + + + + + + + + + + \ No newline at end of file diff --git a/frontend/app/features/content/shared/list/content-list-field.component.scss b/frontend/app/features/content/shared/list/content-list-field.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/features/content/shared/list/content-list-field.component.ts b/frontend/app/features/content/shared/list/content-list-field.component.ts new file mode 100644 index 000000000..637342aca --- /dev/null +++ b/frontend/app/features/content/shared/list/content-list-field.component.ts @@ -0,0 +1,76 @@ +/* + * Squidex Headless CMS + * + * @license + * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. + */ + +import { ChangeDetectionStrategy, Component, Input, OnChanges } from '@angular/core'; +import { FormGroup } from '@angular/forms'; + +import { + ContentDto, + getContentValue, + LanguageDto, + MetaFields, + RootFieldDto, + TableField, + Types +} from '@app/shared'; + +@Component({ + selector: 'sqx-content-list-field', + styleUrls: ['./content-list-field.component.scss'], + templateUrl: './content-list-field.component.html', + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class ContentListFieldComponent implements OnChanges { + @Input() + public field: TableField; + + @Input() + public content: ContentDto; + + @Input() + public patchAllowed: boolean; + + @Input() + public patchForm: FormGroup; + + @Input() + public language: LanguageDto; + + public value: any; + + public ngOnChanges() { + this.reset(); + } + + public reset() { + if (Types.is(this.field, RootFieldDto)) { + const { value, formatted } = getContentValue(this.content, this.language, this.field); + + if (this.patchForm) { + const formControl = this.patchForm.controls[this.field.name]; + + if (formControl) { + formControl.setValue(value); + } + } + + this.value = formatted; + } + } + + public get metaFields() { + return MetaFields; + } + + public get isInlineEditable() { + return Types.is(this.field, RootFieldDto) ? this.field.isInlineEditable : false; + } + + public get fieldName() { + return Types.is(this.field, RootFieldDto) ? this.field.name : this.field; + } +} \ No newline at end of file diff --git a/frontend/app/features/content/shared/list/content-list-header.component.html b/frontend/app/features/content/shared/list/content-list-header.component.html new file mode 100644 index 000000000..707012dc1 --- /dev/null +++ b/frontend/app/features/content/shared/list/content-list-header.component.html @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/frontend/app/features/content/shared/list/content-list-header.component.scss b/frontend/app/features/content/shared/list/content-list-header.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/features/content/shared/list/content-list-header.component.ts b/frontend/app/features/content/shared/list/content-list-header.component.ts new file mode 100644 index 000000000..89fe2d91e --- /dev/null +++ b/frontend/app/features/content/shared/list/content-list-header.component.ts @@ -0,0 +1,63 @@ +/* + * Squidex Headless CMS + * + * @license + * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. + */ + +import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'; + +import { + LanguageDto, + MetaFields, + Query, + RootFieldDto, + TableField, + Types +} from '@app/shared'; + +@Component({ + selector: 'sqx-content-list-header', + styleUrls: ['./content-list-header.component.scss'], + templateUrl: './content-list-header.component.html', + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class ContentListHeaderComponent { + @Input() + public field: TableField; + + @Output() + public queryChange = new EventEmitter(); + + @Input() + public query: Query; + + @Input() + public language: LanguageDto; + + public get metaFields() { + return MetaFields; + } + + public get isSortable() { + return Types.is(this.field, RootFieldDto) ? this.field.properties.isSortable : false; + } + + public get fieldName() { + return Types.is(this.field, RootFieldDto) ? this.field.name : this.field; + } + + public get fieldDisplayName() { + return Types.is(this.field, RootFieldDto) ? this.field.displayName : ''; + } + + public get fieldPath() { + if (Types.isString(this.field)) { + return this.field; + } else if (this.field.isLocalizable && this.language) { + return `data.${this.field.name}.${this.language.iso2Code}`; + } else { + return `data.${this.field.name}.iv`; + } + } +} \ No newline at end of file diff --git a/frontend/app/features/content/shared/list/content-value-editor.component.html b/frontend/app/features/content/shared/list/content-value-editor.component.html new file mode 100644 index 000000000..b94b4ff30 --- /dev/null +++ b/frontend/app/features/content/shared/list/content-value-editor.component.html @@ -0,0 +1,48 @@ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/frontend/app/features/content/shared/list/content-value-editor.component.scss b/frontend/app/features/content/shared/list/content-value-editor.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/features/content/shared/list/content-value-editor.component.ts b/frontend/app/features/content/shared/list/content-value-editor.component.ts new file mode 100644 index 000000000..233a58994 --- /dev/null +++ b/frontend/app/features/content/shared/list/content-value-editor.component.ts @@ -0,0 +1,25 @@ +/* + * Squidex Headless CMS + * + * @license + * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. + */ + +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; +import { FormGroup } from '@angular/forms'; + +import { FieldDto } from '@app/shared'; + +@Component({ + selector: 'sqx-content-value-editor', + styleUrls: ['./content-value-editor.component.scss'], + templateUrl: './content-value-editor.component.html', + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class ContentValueEditorComponent { + @Input() + public field: FieldDto; + + @Input() + public form: FormGroup; +} \ No newline at end of file diff --git a/frontend/app/features/content/shared/list/content-value.component.html b/frontend/app/features/content/shared/list/content-value.component.html new file mode 100644 index 000000000..7545608ed --- /dev/null +++ b/frontend/app/features/content/shared/list/content-value.component.html @@ -0,0 +1,6 @@ + + {{value}} + + + + \ No newline at end of file diff --git a/frontend/app/features/content/shared/list/content-value.component.scss b/frontend/app/features/content/shared/list/content-value.component.scss new file mode 100644 index 000000000..39752b104 --- /dev/null +++ b/frontend/app/features/content/shared/list/content-value.component.scss @@ -0,0 +1,14 @@ +:ng-deep { + .html-value { + img { + margin-top: -25px; + max-height: 50px; + min-height: 50px; + position: absolute; + } + } +} + +.html-value { + position: relative; +} \ No newline at end of file diff --git a/frontend/app/features/content/shared/list/content-value.component.ts b/frontend/app/features/content/shared/list/content-value.component.ts new file mode 100644 index 000000000..51d5b18bb --- /dev/null +++ b/frontend/app/features/content/shared/list/content-value.component.ts @@ -0,0 +1,25 @@ +/* + * Squidex Headless CMS + * + * @license + * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. + */ + +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +import { HtmlValue, Types } from '@app/shared'; + +@Component({ + selector: 'sqx-content-value', + styleUrls: ['./content-value.component.scss'], + templateUrl: './content-value.component.html', + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class ContentValueComponent { + @Input() + public value: any; + + public get isPlain() { + return !Types.is(this.value, HtmlValue); + } +} \ No newline at end of file diff --git a/frontend/app/features/content/shared/content.component.html b/frontend/app/features/content/shared/list/content.component.html similarity index 88% rename from frontend/app/features/content/shared/content.component.html rename to frontend/app/features/content/shared/list/content.component.html index a60669440..cc3604ca9 100644 --- a/frontend/app/features/content/shared/content.component.html +++ b/frontend/app/features/content/shared/list/content.component.html @@ -2,7 +2,7 @@ + (ngModelChange)="selectedChange.emit($event)" />
@@ -25,7 +25,7 @@ - - + \ No newline at end of file diff --git a/frontend/app/features/content/shared/references-editor.component.scss b/frontend/app/features/content/shared/references/references-editor.component.scss similarity index 95% rename from frontend/app/features/content/shared/references-editor.component.scss rename to frontend/app/features/content/shared/references/references-editor.component.scss index 91fbf4c99..3b3f653ef 100644 --- a/frontend/app/features/content/shared/references-editor.component.scss +++ b/frontend/app/features/content/shared/references/references-editor.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .disabled { pointer-events: none; } diff --git a/frontend/app/features/content/shared/references-editor.component.ts b/frontend/app/features/content/shared/references/references-editor.component.ts similarity index 94% rename from frontend/app/features/content/shared/references-editor.component.ts rename to frontend/app/features/content/shared/references/references-editor.component.ts index 9c4751d28..fec9b8989 100644 --- a/frontend/app/features/content/shared/references-editor.component.ts +++ b/frontend/app/features/content/shared/references/references-editor.component.ts @@ -34,11 +34,12 @@ interface State { selector: 'sqx-references-editor', styleUrls: ['./references-editor.component.scss'], templateUrl: './references-editor.component.html', - providers: [SQX_REFERENCES_EDITOR_CONTROL_VALUE_ACCESSOR], + providers: [ + SQX_REFERENCES_EDITOR_CONTROL_VALUE_ACCESSOR + ], changeDetection: ChangeDetectionStrategy.OnPush }) -// tslint:disable-next-line: readonly-array -export class ReferencesEditorComponent extends StatefulControlComponent { +export class ReferencesEditorComponent extends StatefulControlComponent> { @Input() public schemaIds: ReadonlyArray; @@ -68,7 +69,7 @@ export class ReferencesEditorComponent extends StatefulControlComponent x.id))) { + if (!Types.equals(obj, this.snapshot.contentItems.map(x => x.id))) { const contentIds: string[] = obj; this.contentsService.getContentsByIds(this.appsState.appName, contentIds) diff --git a/frontend/app/features/dashboard/pages/dashboard-page.component.scss b/frontend/app/features/dashboard/pages/dashboard-page.component.scss index 487878184..2468c97cc 100644 --- a/frontend/app/features/dashboard/pages/dashboard-page.component.scss +++ b/frontend/app/features/dashboard/pages/dashboard-page.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .dashboard { & { @include absolute(0, 0, 0, 0); diff --git a/frontend/app/features/rules/pages/events/rule-events-page.component.scss b/frontend/app/features/rules/pages/events/rule-events-page.component.scss index 9714b2f2b..678a2764c 100644 --- a/frontend/app/features/rules/pages/events/rule-events-page.component.scss +++ b/frontend/app/features/rules/pages/events/rule-events-page.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - h3 { margin-bottom: 1rem; } diff --git a/frontend/app/features/rules/pages/rules/actions/generic-action.component.scss b/frontend/app/features/rules/pages/rules/actions/generic-action.component.scss index 91941c2fc..57ca22613 100644 --- a/frontend/app/features/rules/pages/rules/actions/generic-action.component.scss +++ b/frontend/app/features/rules/pages/rules/actions/generic-action.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .form-check { margin-bottom: -.25rem; } diff --git a/frontend/app/features/rules/pages/rules/rule-element.component.scss b/frontend/app/features/rules/pages/rules/rule-element.component.scss index 7fcbd6318..06fd8cbaa 100644 --- a/frontend/app/features/rules/pages/rules/rule-element.component.scss +++ b/frontend/app/features/rules/pages/rules/rule-element.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .small { & { height: 3rem; diff --git a/frontend/app/features/rules/pages/rules/rule-icon.component.html b/frontend/app/features/rules/pages/rules/rule-icon.component.html new file mode 100644 index 000000000..b74ae71d5 --- /dev/null +++ b/frontend/app/features/rules/pages/rules/rule-icon.component.html @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/frontend/app/features/rules/pages/rules/rule-icon.component.scss b/frontend/app/features/rules/pages/rules/rule-icon.component.scss new file mode 100644 index 000000000..dc7d034a4 --- /dev/null +++ b/frontend/app/features/rules/pages/rules/rule-icon.component.scss @@ -0,0 +1,45 @@ +:ng-deep { + svg { + display: block; + + fill: $color-dark-foreground; + } +} + +.svg-icon { + display: inline-block; +} + +.icon { + color: $color-dark-foreground; +} + +.sm { + .icon { + font-size: 14px; + } + + .svg-icon { + width: 14px; + } +} + +.md { + .icon { + font-size: 20px; + } + + .svg-icon { + width: 20px; + } +} + +.lg { + .icon { + font-size: 30px; + } + + .svg-icon { + width: 30px; + } +} \ No newline at end of file diff --git a/frontend/app/features/rules/pages/rules/rule-icon.component.ts b/frontend/app/features/rules/pages/rules/rule-icon.component.ts index 219c3cd11..ae5a09374 100644 --- a/frontend/app/features/rules/pages/rules/rule-icon.component.ts +++ b/frontend/app/features/rules/pages/rules/rule-icon.component.ts @@ -13,53 +13,8 @@ import { RuleElementDto } from '@app/shared'; @Component({ selector: 'sqx-rule-icon', - template: ` - - - - - - - - `, - styles: [` - .svg-icon { - display: inline-block; - } - - .icon { - color: white; - } - - .sm .icon { - font-size: 14px; - } - - .sm .svg-icon { - width: 14px; - } - - .md .icon { - font-size: 20px; - } - - .md .svg-icon { - width: 20px; - } - - .lg .icon { - font-size: 30px; - } - - .lg .svg-icon { - width: 30px; - } - - ::ng-deep svg { - fill: white; - display: block; - }` - ], + styleUrls: ['./rule-icon.component.scss'], + templateUrl: './rule-icon.component.html', changeDetection: ChangeDetectionStrategy.OnPush }) export class RuleIconComponent { diff --git a/frontend/app/features/rules/pages/rules/rule-wizard.component.scss b/frontend/app/features/rules/pages/rules/rule-wizard.component.scss index a1105fa9d..f413e0562 100644 --- a/frontend/app/features/rules/pages/rules/rule-wizard.component.scss +++ b/frontend/app/features/rules/pages/rules/rule-wizard.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .rule-element { margin: .25rem; } diff --git a/frontend/app/features/rules/pages/rules/rule.component.scss b/frontend/app/features/rules/pages/rules/rule.component.scss index 65ee99bc7..1f4dbccc6 100644 --- a/frontend/app/features/rules/pages/rules/rule.component.scss +++ b/frontend/app/features/rules/pages/rules/rule.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .card { & { border-bottom-width: 2px; diff --git a/frontend/app/features/rules/pages/rules/rules-page.component.scss b/frontend/app/features/rules/pages/rules/rules-page.component.scss index 7d868467c..90b884b26 100644 --- a/frontend/app/features/rules/pages/rules/rules-page.component.scss +++ b/frontend/app/features/rules/pages/rules/rules-page.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .rule-element { display: block; } diff --git a/frontend/app/features/rules/pages/rules/triggers/asset-changed-trigger.component.scss b/frontend/app/features/rules/pages/rules/triggers/asset-changed-trigger.component.scss index 6e1eef5ec..48b93f24f 100644 --- a/frontend/app/features/rules/pages/rules/triggers/asset-changed-trigger.component.scss +++ b/frontend/app/features/rules/pages/rules/triggers/asset-changed-trigger.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - textarea { height: 100px; } \ No newline at end of file diff --git a/frontend/app/features/rules/pages/rules/triggers/comment-trigger.component.scss b/frontend/app/features/rules/pages/rules/triggers/comment-trigger.component.scss index 6e1eef5ec..48b93f24f 100644 --- a/frontend/app/features/rules/pages/rules/triggers/comment-trigger.component.scss +++ b/frontend/app/features/rules/pages/rules/triggers/comment-trigger.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - textarea { height: 100px; } \ No newline at end of file diff --git a/frontend/app/features/rules/pages/rules/triggers/content-changed-trigger.component.scss b/frontend/app/features/rules/pages/rules/triggers/content-changed-trigger.component.scss index 858cd09ff..dad1080bf 100644 --- a/frontend/app/features/rules/pages/rules/triggers/content-changed-trigger.component.scss +++ b/frontend/app/features/rules/pages/rules/triggers/content-changed-trigger.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .section { border-top: 1px solid $color-border; padding-bottom: 1rem; diff --git a/frontend/app/features/rules/pages/rules/triggers/schema-changed-trigger.component.scss b/frontend/app/features/rules/pages/rules/triggers/schema-changed-trigger.component.scss index 6e1eef5ec..48b93f24f 100644 --- a/frontend/app/features/rules/pages/rules/triggers/schema-changed-trigger.component.scss +++ b/frontend/app/features/rules/pages/rules/triggers/schema-changed-trigger.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - textarea { height: 100px; } \ No newline at end of file diff --git a/frontend/app/features/rules/pages/rules/triggers/usage-trigger.component.scss b/frontend/app/features/rules/pages/rules/triggers/usage-trigger.component.scss index 6e1eef5ec..48b93f24f 100644 --- a/frontend/app/features/rules/pages/rules/triggers/usage-trigger.component.scss +++ b/frontend/app/features/rules/pages/rules/triggers/usage-trigger.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - textarea { height: 100px; } \ No newline at end of file diff --git a/frontend/app/features/schemas/declarations.ts b/frontend/app/features/schemas/declarations.ts index 084450674..808e22af9 100644 --- a/frontend/app/features/schemas/declarations.ts +++ b/frontend/app/features/schemas/declarations.ts @@ -5,41 +5,45 @@ * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. */ -export * from './pages/schema/types/array-validation.component'; -export * from './pages/schema/types/assets-ui.component'; -export * from './pages/schema/types/assets-validation.component'; -export * from './pages/schema/types/boolean-ui.component'; -export * from './pages/schema/types/boolean-validation.component'; -export * from './pages/schema/types/date-time-ui.component'; -export * from './pages/schema/types/date-time-validation.component'; -export * from './pages/schema/types/geolocation-ui.component'; -export * from './pages/schema/types/geolocation-validation.component'; -export * from './pages/schema/types/json-ui.component'; -export * from './pages/schema/types/json-validation.component'; -export * from './pages/schema/types/number-ui.component'; -export * from './pages/schema/types/number-validation.component'; -export * from './pages/schema/types/references-ui.component'; -export * from './pages/schema/types/references-validation.component'; -export * from './pages/schema/types/string-ui.component'; -export * from './pages/schema/types/string-validation.component'; -export * from './pages/schema/types/tags-ui.component'; -export * from './pages/schema/types/tags-validation.component'; - -export * from './pages/schema/forms/field-form-common.component'; -export * from './pages/schema/forms/field-form-ui.component'; -export * from './pages/schema/forms/field-form-validation.component'; -export * from './pages/schema/forms/field-form.component'; - -export * from './pages/schema/field-list.component'; -export * from './pages/schema/field-wizard.component'; -export * from './pages/schema/field.component'; -export * from './pages/schema/schema-edit-form.component'; -export * from './pages/schema/schema-export-form.component'; -export * from './pages/schema/schema-fields.component'; export * from './pages/schema/schema-page.component'; -export * from './pages/schema/schema-preview-urls-form.component'; -export * from './pages/schema/schema-scripts-form.component'; -export * from './pages/schema/schema-ui-form.component'; + +export * from './pages/schema/common/schema-edit-form.component'; + +export * from './pages/schema/export/schema-export-form.component'; + +export * from './pages/schema/fields/field-wizard.component'; +export * from './pages/schema/fields/field.component'; +export * from './pages/schema/fields/forms/field-form-common.component'; +export * from './pages/schema/fields/forms/field-form-ui.component'; +export * from './pages/schema/fields/forms/field-form-validation.component'; +export * from './pages/schema/fields/forms/field-form.component'; +export * from './pages/schema/fields/schema-fields.component'; +export * from './pages/schema/fields/types/array-validation.component'; +export * from './pages/schema/fields/types/assets-ui.component'; +export * from './pages/schema/fields/types/assets-validation.component'; +export * from './pages/schema/fields/types/boolean-ui.component'; +export * from './pages/schema/fields/types/boolean-validation.component'; +export * from './pages/schema/fields/types/date-time-ui.component'; +export * from './pages/schema/fields/types/date-time-validation.component'; +export * from './pages/schema/fields/types/geolocation-ui.component'; +export * from './pages/schema/fields/types/geolocation-validation.component'; +export * from './pages/schema/fields/types/json-ui.component'; +export * from './pages/schema/fields/types/json-validation.component'; +export * from './pages/schema/fields/types/number-ui.component'; +export * from './pages/schema/fields/types/number-validation.component'; +export * from './pages/schema/fields/types/references-ui.component'; +export * from './pages/schema/fields/types/references-validation.component'; +export * from './pages/schema/fields/types/string-ui.component'; +export * from './pages/schema/fields/types/string-validation.component'; +export * from './pages/schema/fields/types/tags-ui.component'; +export * from './pages/schema/fields/types/tags-validation.component'; + +export * from './pages/schema/preview/schema-preview-urls-form.component'; + +export * from './pages/schema/scripts/schema-scripts-form.component'; + +export * from './pages/schema/ui/field-list.component'; +export * from './pages/schema/ui/schema-ui-form.component'; export * from './pages/schemas/schema-form.component'; export * from './pages/schemas/schemas-page.component'; \ No newline at end of file diff --git a/frontend/app/features/schemas/pages/schema/schema-edit-form.component.html b/frontend/app/features/schemas/pages/schema/common/schema-edit-form.component.html similarity index 100% rename from frontend/app/features/schemas/pages/schema/schema-edit-form.component.html rename to frontend/app/features/schemas/pages/schema/common/schema-edit-form.component.html diff --git a/frontend/app/features/schemas/pages/schema/schema-edit-form.component.scss b/frontend/app/features/schemas/pages/schema/common/schema-edit-form.component.scss similarity index 68% rename from frontend/app/features/schemas/pages/schema/schema-edit-form.component.scss rename to frontend/app/features/schemas/pages/schema/common/schema-edit-form.component.scss index 71c028eac..7695fcc0b 100644 --- a/frontend/app/features/schemas/pages/schema/schema-edit-form.component.scss +++ b/frontend/app/features/schemas/pages/schema/common/schema-edit-form.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .card-header, .card-footer { padding: 1.25rem; diff --git a/frontend/app/features/schemas/pages/schema/schema-edit-form.component.ts b/frontend/app/features/schemas/pages/schema/common/schema-edit-form.component.ts similarity index 100% rename from frontend/app/features/schemas/pages/schema/schema-edit-form.component.ts rename to frontend/app/features/schemas/pages/schema/common/schema-edit-form.component.ts diff --git a/frontend/app/features/schemas/pages/schema/schema-export-form.component.html b/frontend/app/features/schemas/pages/schema/export/schema-export-form.component.html similarity index 100% rename from frontend/app/features/schemas/pages/schema/schema-export-form.component.html rename to frontend/app/features/schemas/pages/schema/export/schema-export-form.component.html diff --git a/frontend/app/features/schemas/pages/schema/schema-export-form.component.scss b/frontend/app/features/schemas/pages/schema/export/schema-export-form.component.scss similarity index 90% rename from frontend/app/features/schemas/pages/schema/schema-export-form.component.scss rename to frontend/app/features/schemas/pages/schema/export/schema-export-form.component.scss index 9f8d22053..58001f79a 100644 --- a/frontend/app/features/schemas/pages/schema/schema-export-form.component.scss +++ b/frontend/app/features/schemas/pages/schema/export/schema-export-form.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - :host, .inner-form, .inner-main { diff --git a/frontend/app/features/schemas/pages/schema/schema-export-form.component.ts b/frontend/app/features/schemas/pages/schema/export/schema-export-form.component.ts similarity index 100% rename from frontend/app/features/schemas/pages/schema/schema-export-form.component.ts rename to frontend/app/features/schemas/pages/schema/export/schema-export-form.component.ts diff --git a/frontend/app/features/schemas/pages/schema/field-wizard.component.html b/frontend/app/features/schemas/pages/schema/fields/field-wizard.component.html similarity index 100% rename from frontend/app/features/schemas/pages/schema/field-wizard.component.html rename to frontend/app/features/schemas/pages/schema/fields/field-wizard.component.html diff --git a/frontend/app/features/schemas/pages/schema/field-wizard.component.scss b/frontend/app/features/schemas/pages/schema/fields/field-wizard.component.scss similarity index 85% rename from frontend/app/features/schemas/pages/schema/field-wizard.component.scss rename to frontend/app/features/schemas/pages/schema/fields/field-wizard.component.scss index c8c7df16c..3a991b7d4 100644 --- a/frontend/app/features/schemas/pages/schema/field-wizard.component.scss +++ b/frontend/app/features/schemas/pages/schema/fields/field-wizard.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - $icon-size: 4.5rem; :host ::ng-deep { diff --git a/frontend/app/features/schemas/pages/schema/field-wizard.component.ts b/frontend/app/features/schemas/pages/schema/fields/field-wizard.component.ts similarity index 100% rename from frontend/app/features/schemas/pages/schema/field-wizard.component.ts rename to frontend/app/features/schemas/pages/schema/fields/field-wizard.component.ts diff --git a/frontend/app/features/schemas/pages/schema/field.component.html b/frontend/app/features/schemas/pages/schema/fields/field.component.html similarity index 100% rename from frontend/app/features/schemas/pages/schema/field.component.html rename to frontend/app/features/schemas/pages/schema/fields/field.component.html diff --git a/frontend/app/features/schemas/pages/schema/field.component.scss b/frontend/app/features/schemas/pages/schema/fields/field.component.scss similarity index 97% rename from frontend/app/features/schemas/pages/schema/field.component.scss rename to frontend/app/features/schemas/pages/schema/fields/field.component.scss index 0dad76061..f97ee0cc8 100644 --- a/frontend/app/features/schemas/pages/schema/field.component.scss +++ b/frontend/app/features/schemas/pages/schema/fields/field.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - $field-header: #e7ebef; $field-line: #c7cfd7; diff --git a/frontend/app/features/schemas/pages/schema/field.component.ts b/frontend/app/features/schemas/pages/schema/fields/field.component.ts similarity index 100% rename from frontend/app/features/schemas/pages/schema/field.component.ts rename to frontend/app/features/schemas/pages/schema/fields/field.component.ts diff --git a/frontend/app/features/schemas/pages/schema/fields/forms/field-form-common.component.html b/frontend/app/features/schemas/pages/schema/fields/forms/field-form-common.component.html new file mode 100644 index 000000000..b6114b6d9 --- /dev/null +++ b/frontend/app/features/schemas/pages/schema/fields/forms/field-form-common.component.html @@ -0,0 +1,53 @@ +
+
+ + +
+ + + + The name of the field in the API response. + +
+
+ +
+ + +
+ + + + + + Display name for documentation and user interfaces. + +
+
+ +
+ + +
+ + + + + + Describe this field for documentation and user interfaces. + +
+
+ +
+ + +
+ + + + Tags to annotate your field for automation processes. + +
+
+
\ No newline at end of file diff --git a/frontend/app/features/schemas/pages/schema/fields/forms/field-form-common.component.scss b/frontend/app/features/schemas/pages/schema/fields/forms/field-form-common.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/features/schemas/pages/schema/fields/forms/field-form-common.component.ts b/frontend/app/features/schemas/pages/schema/fields/forms/field-form-common.component.ts new file mode 100644 index 000000000..dbf44ac44 --- /dev/null +++ b/frontend/app/features/schemas/pages/schema/fields/forms/field-form-common.component.ts @@ -0,0 +1,29 @@ +/* + * Squidex Headless CMS + * + * @license + * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. + */ + +import { Component, Input } from '@angular/core'; +import { FormGroup } from '@angular/forms'; + +import { FieldDto } from '@app/shared'; + +@Component({ + selector: 'sqx-field-form-common', + styleUrls: ['./field-form-common.component.scss'], + templateUrl: './field-form-common.component.html' +}) +export class FieldFormCommonComponent { + public readonly standalone = { standalone: true }; + + @Input() + public editForm: FormGroup; + + @Input() + public editFormSubmitted = false; + + @Input() + public field: FieldDto; +} \ No newline at end of file diff --git a/frontend/app/features/schemas/pages/schema/fields/forms/field-form-ui.component.html b/frontend/app/features/schemas/pages/schema/fields/forms/field-form-ui.component.html new file mode 100644 index 000000000..bef156f55 --- /dev/null +++ b/frontend/app/features/schemas/pages/schema/fields/forms/field-form-ui.component.html @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/frontend/app/features/schemas/pages/schema/fields/forms/field-form-ui.component.scss b/frontend/app/features/schemas/pages/schema/fields/forms/field-form-ui.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/features/schemas/pages/schema/fields/forms/field-form-ui.component.ts b/frontend/app/features/schemas/pages/schema/fields/forms/field-form-ui.component.ts new file mode 100644 index 000000000..e5134c0bf --- /dev/null +++ b/frontend/app/features/schemas/pages/schema/fields/forms/field-form-ui.component.ts @@ -0,0 +1,24 @@ +/* + * Squidex Headless CMS + * + * @license + * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. + */ + +import { Component, Input } from '@angular/core'; +import { FormGroup } from '@angular/forms'; + +import { FieldDto } from '@app/shared'; + +@Component({ + selector: 'sqx-field-form-ui', + styleUrls: ['./field-form-ui.component.scss'], + templateUrl: './field-form-ui.component.html' +}) +export class FieldFormUIComponent { + @Input() + public editForm: FormGroup; + + @Input() + public field: FieldDto; +} \ No newline at end of file diff --git a/frontend/app/features/schemas/pages/schema/fields/forms/field-form-validation.component.html b/frontend/app/features/schemas/pages/schema/fields/forms/field-form-validation.component.html new file mode 100644 index 000000000..4a7b0f9dc --- /dev/null +++ b/frontend/app/features/schemas/pages/schema/fields/forms/field-form-validation.component.html @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/frontend/app/features/schemas/pages/schema/fields/forms/field-form-validation.component.scss b/frontend/app/features/schemas/pages/schema/fields/forms/field-form-validation.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/features/schemas/pages/schema/fields/forms/field-form-validation.component.ts b/frontend/app/features/schemas/pages/schema/fields/forms/field-form-validation.component.ts new file mode 100644 index 000000000..0bdc39371 --- /dev/null +++ b/frontend/app/features/schemas/pages/schema/fields/forms/field-form-validation.component.ts @@ -0,0 +1,27 @@ +/* + * Squidex Headless CMS + * + * @license + * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. + */ + +import { Component, Input } from '@angular/core'; +import { FormGroup } from '@angular/forms'; + +import { FieldDto, PatternDto } from '@app/shared'; + +@Component({ + selector: 'sqx-field-form-validation', + styleUrls: ['./field-form-validation.component.scss'], + templateUrl: './field-form-validation.component.html' +}) +export class FieldFormValidationComponent { + @Input() + public editForm: FormGroup; + + @Input() + public field: FieldDto; + + @Input() + public patterns: ReadonlyArray; +} \ No newline at end of file diff --git a/frontend/app/features/schemas/pages/schema/fields/forms/field-form.component.html b/frontend/app/features/schemas/pages/schema/fields/forms/field-form.component.html new file mode 100644 index 000000000..274beedc0 --- /dev/null +++ b/frontend/app/features/schemas/pages/schema/fields/forms/field-form.component.html @@ -0,0 +1,30 @@ +
+ + +
+ + +
+
+ +
+ +
+ +
+ +
+ +
+ +
\ No newline at end of file diff --git a/frontend/app/features/schemas/pages/schema/fields/forms/field-form.component.scss b/frontend/app/features/schemas/pages/schema/fields/forms/field-form.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/features/schemas/pages/schema/fields/forms/field-form.component.ts b/frontend/app/features/schemas/pages/schema/fields/forms/field-form.component.ts new file mode 100644 index 000000000..de35bbdec --- /dev/null +++ b/frontend/app/features/schemas/pages/schema/fields/forms/field-form.component.ts @@ -0,0 +1,53 @@ +/* + * Squidex Headless CMS + * + * @license + * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. + */ + +import { AfterViewInit, Component, EventEmitter, Input, Output } from '@angular/core'; +import { FormGroup } from '@angular/forms'; + +import { FieldDto, PatternDto } from '@app/shared'; + +@Component({ + selector: 'sqx-field-form', + styleUrls: ['./field-form.component.scss'], + templateUrl: './field-form.component.html' +}) +export class FieldFormComponent implements AfterViewInit { + @Input() + public showButtons: boolean; + + @Input() + public isEditable: boolean; + + @Input() + public editForm: FormGroup; + + @Input() + public editFormSubmitted: boolean; + + @Input() + public patterns: ReadonlyArray; + + @Input() + public field: FieldDto; + + @Output() + public cancel = new EventEmitter(); + + public selectedTab = 0; + + public ngAfterViewInit() { + if (!this.isEditable) { + this.editForm.disable(); + } else { + this.editForm.enable(); + } + } + + public selectTab(tab: number) { + this.selectedTab = tab; + } +} \ No newline at end of file diff --git a/frontend/app/features/schemas/pages/schema/schema-fields.component.html b/frontend/app/features/schemas/pages/schema/fields/schema-fields.component.html similarity index 100% rename from frontend/app/features/schemas/pages/schema/schema-fields.component.html rename to frontend/app/features/schemas/pages/schema/fields/schema-fields.component.html diff --git a/frontend/app/features/schemas/pages/schema/schema-fields.component.scss b/frontend/app/features/schemas/pages/schema/fields/schema-fields.component.scss similarity index 90% rename from frontend/app/features/schemas/pages/schema/schema-fields.component.scss rename to frontend/app/features/schemas/pages/schema/fields/schema-fields.component.scss index 7b7990804..b4b9e68d6 100644 --- a/frontend/app/features/schemas/pages/schema/schema-fields.component.scss +++ b/frontend/app/features/schemas/pages/schema/fields/schema-fields.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - :host { overflow-x: hidden; overflow-y: auto; diff --git a/frontend/app/features/schemas/pages/schema/schema-fields.component.ts b/frontend/app/features/schemas/pages/schema/fields/schema-fields.component.ts similarity index 100% rename from frontend/app/features/schemas/pages/schema/schema-fields.component.ts rename to frontend/app/features/schemas/pages/schema/fields/schema-fields.component.ts diff --git a/frontend/app/features/schemas/pages/schema/types/array-validation.component.html b/frontend/app/features/schemas/pages/schema/fields/types/array-validation.component.html similarity index 100% rename from frontend/app/features/schemas/pages/schema/types/array-validation.component.html rename to frontend/app/features/schemas/pages/schema/fields/types/array-validation.component.html diff --git a/frontend/app/features/schemas/pages/schema/types/array-validation.component.scss b/frontend/app/features/schemas/pages/schema/fields/types/array-validation.component.scss similarity index 81% rename from frontend/app/features/schemas/pages/schema/types/array-validation.component.scss rename to frontend/app/features/schemas/pages/schema/fields/types/array-validation.component.scss index 04dcbf5de..63166b94e 100644 --- a/frontend/app/features/schemas/pages/schema/types/array-validation.component.scss +++ b/frontend/app/features/schemas/pages/schema/fields/types/array-validation.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .minmax { &-col { position: relative; diff --git a/frontend/app/features/schemas/pages/schema/types/array-validation.component.ts b/frontend/app/features/schemas/pages/schema/fields/types/array-validation.component.ts similarity index 100% rename from frontend/app/features/schemas/pages/schema/types/array-validation.component.ts rename to frontend/app/features/schemas/pages/schema/fields/types/array-validation.component.ts diff --git a/frontend/app/features/schemas/pages/schema/types/assets-ui.component.html b/frontend/app/features/schemas/pages/schema/fields/types/assets-ui.component.html similarity index 100% rename from frontend/app/features/schemas/pages/schema/types/assets-ui.component.html rename to frontend/app/features/schemas/pages/schema/fields/types/assets-ui.component.html diff --git a/frontend/app/features/schemas/pages/schema/fields/types/assets-ui.component.scss b/frontend/app/features/schemas/pages/schema/fields/types/assets-ui.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/features/schemas/pages/schema/types/assets-ui.component.ts b/frontend/app/features/schemas/pages/schema/fields/types/assets-ui.component.ts similarity index 100% rename from frontend/app/features/schemas/pages/schema/types/assets-ui.component.ts rename to frontend/app/features/schemas/pages/schema/fields/types/assets-ui.component.ts diff --git a/frontend/app/features/schemas/pages/schema/types/assets-validation.component.html b/frontend/app/features/schemas/pages/schema/fields/types/assets-validation.component.html similarity index 100% rename from frontend/app/features/schemas/pages/schema/types/assets-validation.component.html rename to frontend/app/features/schemas/pages/schema/fields/types/assets-validation.component.html diff --git a/frontend/app/features/schemas/pages/schema/types/assets-validation.component.scss b/frontend/app/features/schemas/pages/schema/fields/types/assets-validation.component.scss similarity index 84% rename from frontend/app/features/schemas/pages/schema/types/assets-validation.component.scss rename to frontend/app/features/schemas/pages/schema/fields/types/assets-validation.component.scss index ab3a93d10..347cb10dc 100644 --- a/frontend/app/features/schemas/pages/schema/types/assets-validation.component.scss +++ b/frontend/app/features/schemas/pages/schema/fields/types/assets-validation.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .minmax { &-col { position: relative; diff --git a/frontend/app/features/schemas/pages/schema/types/assets-validation.component.ts b/frontend/app/features/schemas/pages/schema/fields/types/assets-validation.component.ts similarity index 100% rename from frontend/app/features/schemas/pages/schema/types/assets-validation.component.ts rename to frontend/app/features/schemas/pages/schema/fields/types/assets-validation.component.ts diff --git a/frontend/app/features/schemas/pages/schema/types/boolean-ui.component.html b/frontend/app/features/schemas/pages/schema/fields/types/boolean-ui.component.html similarity index 100% rename from frontend/app/features/schemas/pages/schema/types/boolean-ui.component.html rename to frontend/app/features/schemas/pages/schema/fields/types/boolean-ui.component.html diff --git a/frontend/app/features/schemas/pages/schema/fields/types/boolean-ui.component.scss b/frontend/app/features/schemas/pages/schema/fields/types/boolean-ui.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/features/schemas/pages/schema/types/boolean-ui.component.ts b/frontend/app/features/schemas/pages/schema/fields/types/boolean-ui.component.ts similarity index 100% rename from frontend/app/features/schemas/pages/schema/types/boolean-ui.component.ts rename to frontend/app/features/schemas/pages/schema/fields/types/boolean-ui.component.ts diff --git a/frontend/app/features/schemas/pages/schema/types/boolean-validation.component.html b/frontend/app/features/schemas/pages/schema/fields/types/boolean-validation.component.html similarity index 100% rename from frontend/app/features/schemas/pages/schema/types/boolean-validation.component.html rename to frontend/app/features/schemas/pages/schema/fields/types/boolean-validation.component.html diff --git a/frontend/app/features/schemas/pages/schema/fields/types/boolean-validation.component.scss b/frontend/app/features/schemas/pages/schema/fields/types/boolean-validation.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/features/schemas/pages/schema/types/boolean-validation.component.ts b/frontend/app/features/schemas/pages/schema/fields/types/boolean-validation.component.ts similarity index 100% rename from frontend/app/features/schemas/pages/schema/types/boolean-validation.component.ts rename to frontend/app/features/schemas/pages/schema/fields/types/boolean-validation.component.ts diff --git a/frontend/app/features/schemas/pages/schema/types/date-time-ui.component.html b/frontend/app/features/schemas/pages/schema/fields/types/date-time-ui.component.html similarity index 100% rename from frontend/app/features/schemas/pages/schema/types/date-time-ui.component.html rename to frontend/app/features/schemas/pages/schema/fields/types/date-time-ui.component.html diff --git a/frontend/app/features/schemas/pages/schema/fields/types/date-time-ui.component.scss b/frontend/app/features/schemas/pages/schema/fields/types/date-time-ui.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/features/schemas/pages/schema/types/date-time-ui.component.ts b/frontend/app/features/schemas/pages/schema/fields/types/date-time-ui.component.ts similarity index 100% rename from frontend/app/features/schemas/pages/schema/types/date-time-ui.component.ts rename to frontend/app/features/schemas/pages/schema/fields/types/date-time-ui.component.ts diff --git a/frontend/app/features/schemas/pages/schema/types/date-time-validation.component.html b/frontend/app/features/schemas/pages/schema/fields/types/date-time-validation.component.html similarity index 100% rename from frontend/app/features/schemas/pages/schema/types/date-time-validation.component.html rename to frontend/app/features/schemas/pages/schema/fields/types/date-time-validation.component.html diff --git a/frontend/app/features/schemas/pages/schema/fields/types/date-time-validation.component.scss b/frontend/app/features/schemas/pages/schema/fields/types/date-time-validation.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/features/schemas/pages/schema/types/date-time-validation.component.ts b/frontend/app/features/schemas/pages/schema/fields/types/date-time-validation.component.ts similarity index 100% rename from frontend/app/features/schemas/pages/schema/types/date-time-validation.component.ts rename to frontend/app/features/schemas/pages/schema/fields/types/date-time-validation.component.ts diff --git a/frontend/app/features/schemas/pages/schema/types/geolocation-ui.component.html b/frontend/app/features/schemas/pages/schema/fields/types/geolocation-ui.component.html similarity index 100% rename from frontend/app/features/schemas/pages/schema/types/geolocation-ui.component.html rename to frontend/app/features/schemas/pages/schema/fields/types/geolocation-ui.component.html diff --git a/frontend/app/features/schemas/pages/schema/fields/types/geolocation-ui.component.scss b/frontend/app/features/schemas/pages/schema/fields/types/geolocation-ui.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/features/schemas/pages/schema/types/geolocation-ui.component.ts b/frontend/app/features/schemas/pages/schema/fields/types/geolocation-ui.component.ts similarity index 100% rename from frontend/app/features/schemas/pages/schema/types/geolocation-ui.component.ts rename to frontend/app/features/schemas/pages/schema/fields/types/geolocation-ui.component.ts diff --git a/frontend/app/features/schemas/pages/schema/types/geolocation-validation.component.html b/frontend/app/features/schemas/pages/schema/fields/types/geolocation-validation.component.html similarity index 100% rename from frontend/app/features/schemas/pages/schema/types/geolocation-validation.component.html rename to frontend/app/features/schemas/pages/schema/fields/types/geolocation-validation.component.html diff --git a/frontend/app/features/schemas/pages/schema/fields/types/geolocation-validation.component.scss b/frontend/app/features/schemas/pages/schema/fields/types/geolocation-validation.component.scss new file mode 100644 index 000000000..dec52f4bc --- /dev/null +++ b/frontend/app/features/schemas/pages/schema/fields/types/geolocation-validation.component.scss @@ -0,0 +1,3 @@ +.form-group { + margin-top: .5rem; +} \ No newline at end of file diff --git a/frontend/app/features/schemas/pages/schema/types/geolocation-validation.component.ts b/frontend/app/features/schemas/pages/schema/fields/types/geolocation-validation.component.ts similarity index 100% rename from frontend/app/features/schemas/pages/schema/types/geolocation-validation.component.ts rename to frontend/app/features/schemas/pages/schema/fields/types/geolocation-validation.component.ts diff --git a/frontend/app/features/schemas/pages/schema/types/json-ui.component.html b/frontend/app/features/schemas/pages/schema/fields/types/json-ui.component.html similarity index 100% rename from frontend/app/features/schemas/pages/schema/types/json-ui.component.html rename to frontend/app/features/schemas/pages/schema/fields/types/json-ui.component.html diff --git a/frontend/app/features/schemas/pages/schema/fields/types/json-ui.component.scss b/frontend/app/features/schemas/pages/schema/fields/types/json-ui.component.scss new file mode 100644 index 000000000..1199047a8 --- /dev/null +++ b/frontend/app/features/schemas/pages/schema/fields/types/json-ui.component.scss @@ -0,0 +1,3 @@ +.form-group { + margin: 0; +} \ No newline at end of file diff --git a/frontend/app/features/schemas/pages/schema/types/json-ui.component.ts b/frontend/app/features/schemas/pages/schema/fields/types/json-ui.component.ts similarity index 100% rename from frontend/app/features/schemas/pages/schema/types/json-ui.component.ts rename to frontend/app/features/schemas/pages/schema/fields/types/json-ui.component.ts diff --git a/frontend/app/features/schemas/pages/schema/types/json-validation.component.html b/frontend/app/features/schemas/pages/schema/fields/types/json-validation.component.html similarity index 100% rename from frontend/app/features/schemas/pages/schema/types/json-validation.component.html rename to frontend/app/features/schemas/pages/schema/fields/types/json-validation.component.html diff --git a/frontend/app/features/schemas/pages/schema/fields/types/json-validation.component.scss b/frontend/app/features/schemas/pages/schema/fields/types/json-validation.component.scss new file mode 100644 index 000000000..dec52f4bc --- /dev/null +++ b/frontend/app/features/schemas/pages/schema/fields/types/json-validation.component.scss @@ -0,0 +1,3 @@ +.form-group { + margin-top: .5rem; +} \ No newline at end of file diff --git a/frontend/app/features/schemas/pages/schema/types/json-validation.component.ts b/frontend/app/features/schemas/pages/schema/fields/types/json-validation.component.ts similarity index 100% rename from frontend/app/features/schemas/pages/schema/types/json-validation.component.ts rename to frontend/app/features/schemas/pages/schema/fields/types/json-validation.component.ts diff --git a/frontend/app/features/schemas/pages/schema/types/number-ui.component.html b/frontend/app/features/schemas/pages/schema/fields/types/number-ui.component.html similarity index 100% rename from frontend/app/features/schemas/pages/schema/types/number-ui.component.html rename to frontend/app/features/schemas/pages/schema/fields/types/number-ui.component.html diff --git a/frontend/app/features/schemas/pages/schema/fields/types/number-ui.component.scss b/frontend/app/features/schemas/pages/schema/fields/types/number-ui.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/features/schemas/pages/schema/types/number-ui.component.ts b/frontend/app/features/schemas/pages/schema/fields/types/number-ui.component.ts similarity index 100% rename from frontend/app/features/schemas/pages/schema/types/number-ui.component.ts rename to frontend/app/features/schemas/pages/schema/fields/types/number-ui.component.ts diff --git a/frontend/app/features/schemas/pages/schema/types/number-validation.component.html b/frontend/app/features/schemas/pages/schema/fields/types/number-validation.component.html similarity index 100% rename from frontend/app/features/schemas/pages/schema/types/number-validation.component.html rename to frontend/app/features/schemas/pages/schema/fields/types/number-validation.component.html diff --git a/frontend/app/features/schemas/pages/schema/types/number-validation.component.scss b/frontend/app/features/schemas/pages/schema/fields/types/number-validation.component.scss similarity index 76% rename from frontend/app/features/schemas/pages/schema/types/number-validation.component.scss rename to frontend/app/features/schemas/pages/schema/fields/types/number-validation.component.scss index c404d5929..c7b39858f 100644 --- a/frontend/app/features/schemas/pages/schema/types/number-validation.component.scss +++ b/frontend/app/features/schemas/pages/schema/fields/types/number-validation.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .minmax { &-col { position: relative; diff --git a/frontend/app/features/schemas/pages/schema/types/number-validation.component.ts b/frontend/app/features/schemas/pages/schema/fields/types/number-validation.component.ts similarity index 100% rename from frontend/app/features/schemas/pages/schema/types/number-validation.component.ts rename to frontend/app/features/schemas/pages/schema/fields/types/number-validation.component.ts diff --git a/frontend/app/features/schemas/pages/schema/types/references-ui.component.html b/frontend/app/features/schemas/pages/schema/fields/types/references-ui.component.html similarity index 100% rename from frontend/app/features/schemas/pages/schema/types/references-ui.component.html rename to frontend/app/features/schemas/pages/schema/fields/types/references-ui.component.html diff --git a/frontend/app/features/schemas/pages/schema/fields/types/references-ui.component.scss b/frontend/app/features/schemas/pages/schema/fields/types/references-ui.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/features/schemas/pages/schema/types/references-ui.component.ts b/frontend/app/features/schemas/pages/schema/fields/types/references-ui.component.ts similarity index 100% rename from frontend/app/features/schemas/pages/schema/types/references-ui.component.ts rename to frontend/app/features/schemas/pages/schema/fields/types/references-ui.component.ts diff --git a/frontend/app/features/schemas/pages/schema/types/references-validation.component.html b/frontend/app/features/schemas/pages/schema/fields/types/references-validation.component.html similarity index 100% rename from frontend/app/features/schemas/pages/schema/types/references-validation.component.html rename to frontend/app/features/schemas/pages/schema/fields/types/references-validation.component.html diff --git a/frontend/app/features/schemas/pages/schema/types/references-validation.component.scss b/frontend/app/features/schemas/pages/schema/fields/types/references-validation.component.scss similarity index 81% rename from frontend/app/features/schemas/pages/schema/types/references-validation.component.scss rename to frontend/app/features/schemas/pages/schema/fields/types/references-validation.component.scss index 04dcbf5de..63166b94e 100644 --- a/frontend/app/features/schemas/pages/schema/types/references-validation.component.scss +++ b/frontend/app/features/schemas/pages/schema/fields/types/references-validation.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .minmax { &-col { position: relative; diff --git a/frontend/app/features/schemas/pages/schema/types/references-validation.component.ts b/frontend/app/features/schemas/pages/schema/fields/types/references-validation.component.ts similarity index 100% rename from frontend/app/features/schemas/pages/schema/types/references-validation.component.ts rename to frontend/app/features/schemas/pages/schema/fields/types/references-validation.component.ts diff --git a/frontend/app/features/schemas/pages/schema/types/string-ui.component.html b/frontend/app/features/schemas/pages/schema/fields/types/string-ui.component.html similarity index 100% rename from frontend/app/features/schemas/pages/schema/types/string-ui.component.html rename to frontend/app/features/schemas/pages/schema/fields/types/string-ui.component.html diff --git a/frontend/app/features/schemas/pages/schema/fields/types/string-ui.component.scss b/frontend/app/features/schemas/pages/schema/fields/types/string-ui.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/features/schemas/pages/schema/types/string-ui.component.ts b/frontend/app/features/schemas/pages/schema/fields/types/string-ui.component.ts similarity index 100% rename from frontend/app/features/schemas/pages/schema/types/string-ui.component.ts rename to frontend/app/features/schemas/pages/schema/fields/types/string-ui.component.ts diff --git a/frontend/app/features/schemas/pages/schema/types/string-validation.component.html b/frontend/app/features/schemas/pages/schema/fields/types/string-validation.component.html similarity index 100% rename from frontend/app/features/schemas/pages/schema/types/string-validation.component.html rename to frontend/app/features/schemas/pages/schema/fields/types/string-validation.component.html diff --git a/frontend/app/features/schemas/pages/schema/types/string-validation.component.scss b/frontend/app/features/schemas/pages/schema/fields/types/string-validation.component.scss similarity index 93% rename from frontend/app/features/schemas/pages/schema/types/string-validation.component.scss rename to frontend/app/features/schemas/pages/schema/fields/types/string-validation.component.scss index 4d9a2db97..922cb129e 100644 --- a/frontend/app/features/schemas/pages/schema/types/string-validation.component.scss +++ b/frontend/app/features/schemas/pages/schema/fields/types/string-validation.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .minmax { &-col { position: relative; diff --git a/frontend/app/features/schemas/pages/schema/types/string-validation.component.ts b/frontend/app/features/schemas/pages/schema/fields/types/string-validation.component.ts similarity index 100% rename from frontend/app/features/schemas/pages/schema/types/string-validation.component.ts rename to frontend/app/features/schemas/pages/schema/fields/types/string-validation.component.ts diff --git a/frontend/app/features/schemas/pages/schema/types/tags-ui.component.html b/frontend/app/features/schemas/pages/schema/fields/types/tags-ui.component.html similarity index 100% rename from frontend/app/features/schemas/pages/schema/types/tags-ui.component.html rename to frontend/app/features/schemas/pages/schema/fields/types/tags-ui.component.html diff --git a/frontend/app/features/schemas/pages/schema/fields/types/tags-ui.component.scss b/frontend/app/features/schemas/pages/schema/fields/types/tags-ui.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/features/schemas/pages/schema/types/tags-ui.component.ts b/frontend/app/features/schemas/pages/schema/fields/types/tags-ui.component.ts similarity index 100% rename from frontend/app/features/schemas/pages/schema/types/tags-ui.component.ts rename to frontend/app/features/schemas/pages/schema/fields/types/tags-ui.component.ts diff --git a/frontend/app/features/schemas/pages/schema/types/tags-validation.component.html b/frontend/app/features/schemas/pages/schema/fields/types/tags-validation.component.html similarity index 100% rename from frontend/app/features/schemas/pages/schema/types/tags-validation.component.html rename to frontend/app/features/schemas/pages/schema/fields/types/tags-validation.component.html diff --git a/frontend/app/features/schemas/pages/schema/types/tags-validation.component.scss b/frontend/app/features/schemas/pages/schema/fields/types/tags-validation.component.scss similarity index 81% rename from frontend/app/features/schemas/pages/schema/types/tags-validation.component.scss rename to frontend/app/features/schemas/pages/schema/fields/types/tags-validation.component.scss index 04dcbf5de..63166b94e 100644 --- a/frontend/app/features/schemas/pages/schema/types/tags-validation.component.scss +++ b/frontend/app/features/schemas/pages/schema/fields/types/tags-validation.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .minmax { &-col { position: relative; diff --git a/frontend/app/features/schemas/pages/schema/types/tags-validation.component.ts b/frontend/app/features/schemas/pages/schema/fields/types/tags-validation.component.ts similarity index 100% rename from frontend/app/features/schemas/pages/schema/types/tags-validation.component.ts rename to frontend/app/features/schemas/pages/schema/fields/types/tags-validation.component.ts diff --git a/frontend/app/features/schemas/pages/schema/forms/field-form-common.component.ts b/frontend/app/features/schemas/pages/schema/forms/field-form-common.component.ts deleted file mode 100644 index e7d204317..000000000 --- a/frontend/app/features/schemas/pages/schema/forms/field-form-common.component.ts +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Squidex Headless CMS - * - * @license - * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. - */ - -import { Component, Input } from '@angular/core'; -import { FormGroup } from '@angular/forms'; - -import { FieldDto } from '@app/shared'; - -@Component({ - selector: 'sqx-field-form-common', - template: ` -
-
- - -
- - - - The name of the field in the API response. - -
-
- -
- - -
- - - - - - Display name for documentation and user interfaces. - -
-
- -
- - -
- - - - - - Describe this field for documentation and user interfaces. - -
-
- -
- - -
- - - - Tags to annotate your field for automation processes. - -
-
-
- ` -}) -export class FieldFormCommonComponent { - public readonly standalone = { standalone: true }; - - @Input() - public editForm: FormGroup; - - @Input() - public editFormSubmitted = false; - - @Input() - public field: FieldDto; -} \ No newline at end of file diff --git a/frontend/app/features/schemas/pages/schema/forms/field-form-ui.component.ts b/frontend/app/features/schemas/pages/schema/forms/field-form-ui.component.ts deleted file mode 100644 index f6b3f0e29..000000000 --- a/frontend/app/features/schemas/pages/schema/forms/field-form-ui.component.ts +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Squidex Headless CMS - * - * @license - * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. - */ - -import { Component, Input } from '@angular/core'; -import { FormGroup } from '@angular/forms'; - -import { FieldDto } from '@app/shared'; - -@Component({ - selector: 'sqx-field-form-ui', - template: ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ` -}) -export class FieldFormUIComponent { - @Input() - public editForm: FormGroup; - - @Input() - public field: FieldDto; -} \ No newline at end of file diff --git a/frontend/app/features/schemas/pages/schema/forms/field-form-validation.component.ts b/frontend/app/features/schemas/pages/schema/forms/field-form-validation.component.ts deleted file mode 100644 index f1a63eb47..000000000 --- a/frontend/app/features/schemas/pages/schema/forms/field-form-validation.component.ts +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Squidex Headless CMS - * - * @license - * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. - */ - -import { Component, Input } from '@angular/core'; -import { FormGroup } from '@angular/forms'; - -import { FieldDto, PatternDto } from '@app/shared'; - -@Component({ - selector: 'sqx-field-form-validation', - template: ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ` -}) -export class FieldFormValidationComponent { - @Input() - public editForm: FormGroup; - - @Input() - public field: FieldDto; - - @Input() - public patterns: ReadonlyArray; -} \ No newline at end of file diff --git a/frontend/app/features/schemas/pages/schema/forms/field-form.component.ts b/frontend/app/features/schemas/pages/schema/forms/field-form.component.ts deleted file mode 100644 index e67b5ce80..000000000 --- a/frontend/app/features/schemas/pages/schema/forms/field-form.component.ts +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Squidex Headless CMS - * - * @license - * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. - */ - -import { AfterViewInit, Component, EventEmitter, Input, Output } from '@angular/core'; -import { FormGroup } from '@angular/forms'; - -import { FieldDto, PatternDto } from '@app/shared'; - -@Component({ - selector: 'sqx-field-form', - template: ` -
- - -
- - -
-
- -
- -
- -
- -
- -
- -
- ` -}) -export class FieldFormComponent implements AfterViewInit { - @Input() - public showButtons: boolean; - - @Input() - public isEditable: boolean; - - @Input() - public editForm: FormGroup; - - @Input() - public editFormSubmitted: boolean; - - @Input() - public patterns: ReadonlyArray; - - @Input() - public field: FieldDto; - - @Output() - public cancel = new EventEmitter(); - - public selectedTab = 0; - - public ngAfterViewInit() { - if (!this.isEditable) { - this.editForm.disable(); - } else { - this.editForm.enable(); - } - } - - public selectTab(tab: number) { - this.selectedTab = tab; - } -} \ No newline at end of file diff --git a/frontend/app/features/schemas/pages/schema/schema-preview-urls-form.component.html b/frontend/app/features/schemas/pages/schema/preview/schema-preview-urls-form.component.html similarity index 100% rename from frontend/app/features/schemas/pages/schema/schema-preview-urls-form.component.html rename to frontend/app/features/schemas/pages/schema/preview/schema-preview-urls-form.component.html diff --git a/frontend/app/features/schemas/pages/schema/schema-preview-urls-form.component.scss b/frontend/app/features/schemas/pages/schema/preview/schema-preview-urls-form.component.scss similarity index 82% rename from frontend/app/features/schemas/pages/schema/schema-preview-urls-form.component.scss rename to frontend/app/features/schemas/pages/schema/preview/schema-preview-urls-form.component.scss index 3724160b0..95f5fe672 100644 --- a/frontend/app/features/schemas/pages/schema/schema-preview-urls-form.component.scss +++ b/frontend/app/features/schemas/pages/schema/preview/schema-preview-urls-form.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .content { margin-top: 1rem; } diff --git a/frontend/app/features/schemas/pages/schema/schema-preview-urls-form.component.ts b/frontend/app/features/schemas/pages/schema/preview/schema-preview-urls-form.component.ts similarity index 100% rename from frontend/app/features/schemas/pages/schema/schema-preview-urls-form.component.ts rename to frontend/app/features/schemas/pages/schema/preview/schema-preview-urls-form.component.ts diff --git a/frontend/app/features/schemas/pages/schema/schema-page.component.scss b/frontend/app/features/schemas/pages/schema/schema-page.component.scss index 8d0a3c7eb..778f3311f 100644 --- a/frontend/app/features/schemas/pages/schema/schema-page.component.scss +++ b/frontend/app/features/schemas/pages/schema/schema-page.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .btn-publishing { &.disabled, &:disabled { diff --git a/frontend/app/features/schemas/pages/schema/schema-scripts-form.component.html b/frontend/app/features/schemas/pages/schema/scripts/schema-scripts-form.component.html similarity index 100% rename from frontend/app/features/schemas/pages/schema/schema-scripts-form.component.html rename to frontend/app/features/schemas/pages/schema/scripts/schema-scripts-form.component.html diff --git a/frontend/app/features/schemas/pages/schema/schema-scripts-form.component.scss b/frontend/app/features/schemas/pages/schema/scripts/schema-scripts-form.component.scss similarity index 90% rename from frontend/app/features/schemas/pages/schema/schema-scripts-form.component.scss rename to frontend/app/features/schemas/pages/schema/scripts/schema-scripts-form.component.scss index 9f8d22053..58001f79a 100644 --- a/frontend/app/features/schemas/pages/schema/schema-scripts-form.component.scss +++ b/frontend/app/features/schemas/pages/schema/scripts/schema-scripts-form.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - :host, .inner-form, .inner-main { diff --git a/frontend/app/features/schemas/pages/schema/schema-scripts-form.component.ts b/frontend/app/features/schemas/pages/schema/scripts/schema-scripts-form.component.ts similarity index 100% rename from frontend/app/features/schemas/pages/schema/schema-scripts-form.component.ts rename to frontend/app/features/schemas/pages/schema/scripts/schema-scripts-form.component.ts diff --git a/frontend/app/features/schemas/pages/schema/types/assets-ui.component.scss b/frontend/app/features/schemas/pages/schema/types/assets-ui.component.scss deleted file mode 100644 index fbb752506..000000000 --- a/frontend/app/features/schemas/pages/schema/types/assets-ui.component.scss +++ /dev/null @@ -1,2 +0,0 @@ -@import '_vars'; -@import '_mixins'; \ No newline at end of file diff --git a/frontend/app/features/schemas/pages/schema/types/boolean-ui.component.scss b/frontend/app/features/schemas/pages/schema/types/boolean-ui.component.scss deleted file mode 100644 index fbb752506..000000000 --- a/frontend/app/features/schemas/pages/schema/types/boolean-ui.component.scss +++ /dev/null @@ -1,2 +0,0 @@ -@import '_vars'; -@import '_mixins'; \ No newline at end of file diff --git a/frontend/app/features/schemas/pages/schema/types/boolean-validation.component.scss b/frontend/app/features/schemas/pages/schema/types/boolean-validation.component.scss deleted file mode 100644 index fbb752506..000000000 --- a/frontend/app/features/schemas/pages/schema/types/boolean-validation.component.scss +++ /dev/null @@ -1,2 +0,0 @@ -@import '_vars'; -@import '_mixins'; \ No newline at end of file diff --git a/frontend/app/features/schemas/pages/schema/types/date-time-ui.component.scss b/frontend/app/features/schemas/pages/schema/types/date-time-ui.component.scss deleted file mode 100644 index fbb752506..000000000 --- a/frontend/app/features/schemas/pages/schema/types/date-time-ui.component.scss +++ /dev/null @@ -1,2 +0,0 @@ -@import '_vars'; -@import '_mixins'; \ No newline at end of file diff --git a/frontend/app/features/schemas/pages/schema/types/date-time-validation.component.scss b/frontend/app/features/schemas/pages/schema/types/date-time-validation.component.scss deleted file mode 100644 index fbb752506..000000000 --- a/frontend/app/features/schemas/pages/schema/types/date-time-validation.component.scss +++ /dev/null @@ -1,2 +0,0 @@ -@import '_vars'; -@import '_mixins'; \ No newline at end of file diff --git a/frontend/app/features/schemas/pages/schema/types/geolocation-ui.component.scss b/frontend/app/features/schemas/pages/schema/types/geolocation-ui.component.scss deleted file mode 100644 index fbb752506..000000000 --- a/frontend/app/features/schemas/pages/schema/types/geolocation-ui.component.scss +++ /dev/null @@ -1,2 +0,0 @@ -@import '_vars'; -@import '_mixins'; \ No newline at end of file diff --git a/frontend/app/features/schemas/pages/schema/types/geolocation-validation.component.scss b/frontend/app/features/schemas/pages/schema/types/geolocation-validation.component.scss deleted file mode 100644 index c976f1922..000000000 --- a/frontend/app/features/schemas/pages/schema/types/geolocation-validation.component.scss +++ /dev/null @@ -1,6 +0,0 @@ -@import '_vars'; -@import '_mixins'; - -.form-group { - margin-top: .5rem; -} \ No newline at end of file diff --git a/frontend/app/features/schemas/pages/schema/types/json-ui.component.scss b/frontend/app/features/schemas/pages/schema/types/json-ui.component.scss deleted file mode 100644 index 1f393a181..000000000 --- a/frontend/app/features/schemas/pages/schema/types/json-ui.component.scss +++ /dev/null @@ -1,6 +0,0 @@ -@import '_vars'; -@import '_mixins'; - -.form-group { - margin: 0; -} \ No newline at end of file diff --git a/frontend/app/features/schemas/pages/schema/types/json-validation.component.scss b/frontend/app/features/schemas/pages/schema/types/json-validation.component.scss deleted file mode 100644 index c976f1922..000000000 --- a/frontend/app/features/schemas/pages/schema/types/json-validation.component.scss +++ /dev/null @@ -1,6 +0,0 @@ -@import '_vars'; -@import '_mixins'; - -.form-group { - margin-top: .5rem; -} \ No newline at end of file diff --git a/frontend/app/features/schemas/pages/schema/types/number-ui.component.scss b/frontend/app/features/schemas/pages/schema/types/number-ui.component.scss deleted file mode 100644 index fbb752506..000000000 --- a/frontend/app/features/schemas/pages/schema/types/number-ui.component.scss +++ /dev/null @@ -1,2 +0,0 @@ -@import '_vars'; -@import '_mixins'; \ No newline at end of file diff --git a/frontend/app/features/schemas/pages/schema/types/references-ui.component.scss b/frontend/app/features/schemas/pages/schema/types/references-ui.component.scss deleted file mode 100644 index fbb752506..000000000 --- a/frontend/app/features/schemas/pages/schema/types/references-ui.component.scss +++ /dev/null @@ -1,2 +0,0 @@ -@import '_vars'; -@import '_mixins'; \ No newline at end of file diff --git a/frontend/app/features/schemas/pages/schema/types/string-ui.component.scss b/frontend/app/features/schemas/pages/schema/types/string-ui.component.scss deleted file mode 100644 index fbb752506..000000000 --- a/frontend/app/features/schemas/pages/schema/types/string-ui.component.scss +++ /dev/null @@ -1,2 +0,0 @@ -@import '_vars'; -@import '_mixins'; \ No newline at end of file diff --git a/frontend/app/features/schemas/pages/schema/types/tags-ui.component.scss b/frontend/app/features/schemas/pages/schema/types/tags-ui.component.scss deleted file mode 100644 index fbb752506..000000000 --- a/frontend/app/features/schemas/pages/schema/types/tags-ui.component.scss +++ /dev/null @@ -1,2 +0,0 @@ -@import '_vars'; -@import '_mixins'; \ No newline at end of file diff --git a/frontend/app/features/schemas/pages/schema/field-list.component.html b/frontend/app/features/schemas/pages/schema/ui/field-list.component.html similarity index 100% rename from frontend/app/features/schemas/pages/schema/field-list.component.html rename to frontend/app/features/schemas/pages/schema/ui/field-list.component.html diff --git a/frontend/app/features/schemas/pages/schema/field-list.component.scss b/frontend/app/features/schemas/pages/schema/ui/field-list.component.scss similarity index 92% rename from frontend/app/features/schemas/pages/schema/field-list.component.scss rename to frontend/app/features/schemas/pages/schema/ui/field-list.component.scss index c304a0964..0851981ac 100644 --- a/frontend/app/features/schemas/pages/schema/field-list.component.scss +++ b/frontend/app/features/schemas/pages/schema/ui/field-list.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .field-list { & { overflow-x: hidden; diff --git a/frontend/app/features/schemas/pages/schema/field-list.component.ts b/frontend/app/features/schemas/pages/schema/ui/field-list.component.ts similarity index 100% rename from frontend/app/features/schemas/pages/schema/field-list.component.ts rename to frontend/app/features/schemas/pages/schema/ui/field-list.component.ts diff --git a/frontend/app/features/schemas/pages/schema/schema-ui-form.component.html b/frontend/app/features/schemas/pages/schema/ui/schema-ui-form.component.html similarity index 100% rename from frontend/app/features/schemas/pages/schema/schema-ui-form.component.html rename to frontend/app/features/schemas/pages/schema/ui/schema-ui-form.component.html diff --git a/frontend/app/features/schemas/pages/schema/schema-ui-form.component.scss b/frontend/app/features/schemas/pages/schema/ui/schema-ui-form.component.scss similarity index 88% rename from frontend/app/features/schemas/pages/schema/schema-ui-form.component.scss rename to frontend/app/features/schemas/pages/schema/ui/schema-ui-form.component.scss index 4ffde1f88..1fc52e501 100644 --- a/frontend/app/features/schemas/pages/schema/schema-ui-form.component.scss +++ b/frontend/app/features/schemas/pages/schema/ui/schema-ui-form.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - :host, .inner-form, .inner-main { diff --git a/frontend/app/features/schemas/pages/schema/schema-ui-form.component.ts b/frontend/app/features/schemas/pages/schema/ui/schema-ui-form.component.ts similarity index 100% rename from frontend/app/features/schemas/pages/schema/schema-ui-form.component.ts rename to frontend/app/features/schemas/pages/schema/ui/schema-ui-form.component.ts diff --git a/frontend/app/features/schemas/pages/schemas/schema-form.component.html b/frontend/app/features/schemas/pages/schemas/schema-form.component.html index 291b137a3..f6f87ab62 100644 --- a/frontend/app/features/schemas/pages/schemas/schema-form.component.html +++ b/frontend/app/features/schemas/pages/schemas/schema-form.component.html @@ -1,5 +1,5 @@
- + Clone Schema @@ -82,7 +82,7 @@ - + diff --git a/frontend/app/features/schemas/pages/schemas/schema-form.component.scss b/frontend/app/features/schemas/pages/schemas/schema-form.component.scss index 6e51df9be..c9a91d893 100644 --- a/frontend/app/features/schemas/pages/schemas/schema-form.component.scss +++ b/frontend/app/features/schemas/pages/schemas/schema-form.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - $icon-size: 4.5rem; .btn-text { diff --git a/frontend/app/features/schemas/pages/schemas/schema-form.component.ts b/frontend/app/features/schemas/pages/schemas/schema-form.component.ts index 1bc12ccc0..5fab111e5 100644 --- a/frontend/app/features/schemas/pages/schemas/schema-form.component.ts +++ b/frontend/app/features/schemas/pages/schemas/schema-form.component.ts @@ -59,10 +59,6 @@ export class SchemaFormComponent implements OnInit { this.complete.emit(value); } - public emitCancel() { - this.cancel.emit(); - } - public createSchema() { const value = this.createForm.submit(); diff --git a/frontend/app/features/schemas/pages/schemas/schemas-page.component.scss b/frontend/app/features/schemas/pages/schemas/schemas-page.component.scss index ad9f41120..0e23f8b6f 100644 --- a/frontend/app/features/schemas/pages/schemas/schemas-page.component.scss +++ b/frontend/app/features/schemas/pages/schemas/schemas-page.component.scss @@ -1,6 +1,3 @@ -@import '_mixins'; -@import '_vars'; - $button-size: calc(2.5rem - 2px); .subheader-button { diff --git a/frontend/app/features/settings/pages/backups/backup.component.html b/frontend/app/features/settings/pages/backups/backup.component.html new file mode 100644 index 000000000..777686922 --- /dev/null +++ b/frontend/app/features/settings/pages/backups/backup.component.html @@ -0,0 +1,49 @@ +
+
+
+ +
+
+
+ Started: +
+
+ Duration: +
+
+
+
+ {{backup.started | sqxFromNow}} +
+
+ {{duration}} +
+
+
+
+ + Events: {{backup.handledEvents | sqxKNumber}} + , + + Assets: {{backup.handledAssets | sqxKNumber}} + +
+
+ Download: + + + Ready + +
+
+
+ +
+
+
\ No newline at end of file diff --git a/frontend/app/features/settings/pages/backups/backup.component.scss b/frontend/app/features/settings/pages/backups/backup.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/features/settings/pages/backups/backup.component.ts b/frontend/app/features/settings/pages/backups/backup.component.ts index 257634d81..e1202c77b 100644 --- a/frontend/app/features/settings/pages/backups/backup.component.ts +++ b/frontend/app/features/settings/pages/backups/backup.component.ts @@ -16,57 +16,8 @@ import { @Component({ selector: 'sqx-backup', - template: ` -
-
-
- -
-
-
- Started: -
-
- Duration: -
-
-
-
- {{backup.started | sqxFromNow}} -
-
- {{duration}} -
-
-
-
- - Events: {{backup.handledEvents | sqxKNumber}} - , - - Assets: {{backup.handledAssets | sqxKNumber}} - -
-
- Download: - - - Ready - -
-
-
- -
-
-
- `, + styleUrls: ['./backup.component.scss'], + templateUrl: './backup.component.html', changeDetection: ChangeDetectionStrategy.OnPush }) export class BackupComponent { diff --git a/frontend/app/features/settings/pages/backups/backups-page.component.scss b/frontend/app/features/settings/pages/backups/backups-page.component.scss index fbb752506..e69de29bb 100644 --- a/frontend/app/features/settings/pages/backups/backups-page.component.scss +++ b/frontend/app/features/settings/pages/backups/backups-page.component.scss @@ -1,2 +0,0 @@ -@import '_vars'; -@import '_mixins'; \ No newline at end of file diff --git a/frontend/app/features/settings/pages/clients/client-add-form.component.html b/frontend/app/features/settings/pages/clients/client-add-form.component.html new file mode 100644 index 000000000..a8d011b34 --- /dev/null +++ b/frontend/app/features/settings/pages/clients/client-add-form.component.html @@ -0,0 +1,17 @@ + \ No newline at end of file diff --git a/frontend/app/features/settings/pages/clients/client-add-form.component.scss b/frontend/app/features/settings/pages/clients/client-add-form.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/features/settings/pages/clients/client-add-form.component.ts b/frontend/app/features/settings/pages/clients/client-add-form.component.ts index 2f8930230..058ce5cad 100644 --- a/frontend/app/features/settings/pages/clients/client-add-form.component.ts +++ b/frontend/app/features/settings/pages/clients/client-add-form.component.ts @@ -12,25 +12,8 @@ import { AddClientForm, ClientsState } from '@app/shared'; @Component({ selector: 'sqx-client-add-form', - template: ` - - `, + styleUrls: ['./client-add-form.component.scss'], + templateUrl: './client-add-form.component.html', changeDetection: ChangeDetectionStrategy.OnPush }) export class ClientAddFormComponent { diff --git a/frontend/app/features/settings/pages/clients/client-connect-form.component.html b/frontend/app/features/settings/pages/clients/client-connect-form.component.html index e48f8e9ec..c50198bb2 100644 --- a/frontend/app/features/settings/pages/clients/client-connect-form.component.html +++ b/frontend/app/features/settings/pages/clients/client-connect-form.component.html @@ -1,4 +1,4 @@ - + Connect diff --git a/frontend/app/features/settings/pages/clients/client-connect-form.component.scss b/frontend/app/features/settings/pages/clients/client-connect-form.component.scss index a93f684b8..27e4bd5f9 100644 --- a/frontend/app/features/settings/pages/clients/client-connect-form.component.scss +++ b/frontend/app/features/settings/pages/clients/client-connect-form.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .badge { @include circle(1.3rem); font-size: 80%; diff --git a/frontend/app/features/settings/pages/clients/client-connect-form.component.ts b/frontend/app/features/settings/pages/clients/client-connect-form.component.ts index 459455ee5..5b587e724 100644 --- a/frontend/app/features/settings/pages/clients/client-connect-form.component.ts +++ b/frontend/app/features/settings/pages/clients/client-connect-form.component.ts @@ -72,10 +72,6 @@ export class ClientConnectFormComponent implements OnInit { public go(step: string) { this.step = step; } - - public emitComplete() { - this.complete.emit(); - } } function connectHttpText(apiUrl: ApiUrlConfig, app: string, client: { id: string, secret: string }) { diff --git a/frontend/app/features/settings/pages/clients/client.component.scss b/frontend/app/features/settings/pages/clients/client.component.scss index 11c5f08c2..29d4f11cc 100644 --- a/frontend/app/features/settings/pages/clients/client.component.scss +++ b/frontend/app/features/settings/pages/clients/client.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .card { & { margin-bottom: .25rem; diff --git a/frontend/app/features/settings/pages/clients/clients-page.component.scss b/frontend/app/features/settings/pages/clients/clients-page.component.scss index fbb752506..e69de29bb 100644 --- a/frontend/app/features/settings/pages/clients/clients-page.component.scss +++ b/frontend/app/features/settings/pages/clients/clients-page.component.scss @@ -1,2 +0,0 @@ -@import '_vars'; -@import '_mixins'; \ No newline at end of file diff --git a/frontend/app/features/settings/pages/contributors/contributor-add-form.component.scss b/frontend/app/features/settings/pages/contributors/contributor-add-form.component.scss index 55a7f9849..0dd6e63aa 100644 --- a/frontend/app/features/settings/pages/contributors/contributor-add-form.component.scss +++ b/frontend/app/features/settings/pages/contributors/contributor-add-form.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .autocomplete-user { & { @include truncate; diff --git a/frontend/app/features/settings/pages/contributors/contributor.component.html b/frontend/app/features/settings/pages/contributors/contributor.component.html new file mode 100644 index 000000000..1f20ab634 --- /dev/null +++ b/frontend/app/features/settings/pages/contributors/contributor.component.html @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/frontend/app/features/settings/pages/contributors/contributor.component.scss b/frontend/app/features/settings/pages/contributors/contributor.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/features/settings/pages/contributors/contributor.component.ts b/frontend/app/features/settings/pages/contributors/contributor.component.ts index 03a75a5c8..9d9ef23ac 100644 --- a/frontend/app/features/settings/pages/contributors/contributor.component.ts +++ b/frontend/app/features/settings/pages/contributors/contributor.component.ts @@ -17,34 +17,8 @@ import { @Component({ selector: '[sqxContributor]', - template: ` - - - - - - - - - - - - - - - - `, + styleUrls: ['./contributor.component.scss'], + templateUrl: './contributor.component.html', changeDetection: ChangeDetectionStrategy.OnPush }) export class ContributorComponent { diff --git a/frontend/app/features/settings/pages/contributors/contributors-page.component.scss b/frontend/app/features/settings/pages/contributors/contributors-page.component.scss index bb69890d6..1331edaf9 100644 --- a/frontend/app/features/settings/pages/contributors/contributors-page.component.scss +++ b/frontend/app/features/settings/pages/contributors/contributors-page.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .import-hint { padding-right: $panel-padding; } \ No newline at end of file diff --git a/frontend/app/features/settings/pages/contributors/import-contributors-dialog.component.html b/frontend/app/features/settings/pages/contributors/import-contributors-dialog.component.html index e8597949c..fbc7a0352 100644 --- a/frontend/app/features/settings/pages/contributors/import-contributors-dialog.component.html +++ b/frontend/app/features/settings/pages/contributors/import-contributors-dialog.component.html @@ -1,5 +1,5 @@
- + Import contributors @@ -50,7 +50,7 @@ - + diff --git a/frontend/app/features/settings/pages/contributors/import-contributors-dialog.component.scss b/frontend/app/features/settings/pages/contributors/import-contributors-dialog.component.scss index 272f6207c..db4d839e8 100644 --- a/frontend/app/features/settings/pages/contributors/import-contributors-dialog.component.scss +++ b/frontend/app/features/settings/pages/contributors/import-contributors-dialog.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - textarea { resize: none; } diff --git a/frontend/app/features/settings/pages/contributors/import-contributors-dialog.component.ts b/frontend/app/features/settings/pages/contributors/import-contributors-dialog.component.ts index c12d0194e..a61137211 100644 --- a/frontend/app/features/settings/pages/contributors/import-contributors-dialog.component.ts +++ b/frontend/app/features/settings/pages/contributors/import-contributors-dialog.component.ts @@ -90,10 +90,6 @@ export class ImportContributorsDialogComponent { ), 1) ).subscribe(); } - - public emitClose() { - this.close.emit(); - } } function createRequest(status: ImportStatus) { diff --git a/frontend/app/features/settings/pages/languages/language-add-form.component.html b/frontend/app/features/settings/pages/languages/language-add-form.component.html new file mode 100644 index 000000000..364d37764 --- /dev/null +++ b/frontend/app/features/settings/pages/languages/language-add-form.component.html @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/frontend/app/features/settings/pages/languages/language-add-form.component.scss b/frontend/app/features/settings/pages/languages/language-add-form.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/features/settings/pages/languages/language-add-form.component.ts b/frontend/app/features/settings/pages/languages/language-add-form.component.ts index 0f4335f98..c307bc348 100644 --- a/frontend/app/features/settings/pages/languages/language-add-form.component.ts +++ b/frontend/app/features/settings/pages/languages/language-add-form.component.ts @@ -16,22 +16,8 @@ import { @Component({ selector: 'sqx-language-add-form', - template: ` - - `, + styleUrls: ['./language-add-form.component.scss'], + templateUrl: './language-add-form.component.html', changeDetection: ChangeDetectionStrategy.OnPush }) export class LanguageAddFormComponent implements OnChanges { diff --git a/frontend/app/features/settings/pages/languages/language.component.scss b/frontend/app/features/settings/pages/languages/language.component.scss index 3c5f53ab9..b2d30c2e5 100644 --- a/frontend/app/features/settings/pages/languages/language.component.scss +++ b/frontend/app/features/settings/pages/languages/language.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - $field-header: #e7ebef; .language { diff --git a/frontend/app/features/settings/pages/languages/languages-page.component.scss b/frontend/app/features/settings/pages/languages/languages-page.component.scss index fbb752506..e69de29bb 100644 --- a/frontend/app/features/settings/pages/languages/languages-page.component.scss +++ b/frontend/app/features/settings/pages/languages/languages-page.component.scss @@ -1,2 +0,0 @@ -@import '_vars'; -@import '_mixins'; \ No newline at end of file diff --git a/frontend/app/features/settings/pages/more/more-page.component.scss b/frontend/app/features/settings/pages/more/more-page.component.scss index eaacb7164..f1e2f1cd7 100644 --- a/frontend/app/features/settings/pages/more/more-page.component.scss +++ b/frontend/app/features/settings/pages/more/more-page.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .app { &-image { min-height: 150px; diff --git a/frontend/app/features/settings/pages/patterns/pattern.component.scss b/frontend/app/features/settings/pages/patterns/pattern.component.scss index d86c13db6..b281dc67e 100644 --- a/frontend/app/features/settings/pages/patterns/pattern.component.scss +++ b/frontend/app/features/settings/pages/patterns/pattern.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .col-options { @include force-width(6rem); } diff --git a/frontend/app/features/settings/pages/patterns/patterns-page.component.scss b/frontend/app/features/settings/pages/patterns/patterns-page.component.scss index fbb752506..e69de29bb 100644 --- a/frontend/app/features/settings/pages/patterns/patterns-page.component.scss +++ b/frontend/app/features/settings/pages/patterns/patterns-page.component.scss @@ -1,2 +0,0 @@ -@import '_vars'; -@import '_mixins'; \ No newline at end of file diff --git a/frontend/app/features/settings/pages/plans/plan.component.scss b/frontend/app/features/settings/pages/plans/plan.component.scss index 7242ddf06..2f2d876ac 100644 --- a/frontend/app/features/settings/pages/plans/plan.component.scss +++ b/frontend/app/features/settings/pages/plans/plan.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .plan { & { margin: .5rem; diff --git a/frontend/app/features/settings/pages/plans/plans-page.component.scss b/frontend/app/features/settings/pages/plans/plans-page.component.scss index cefe5d808..7b4a1462e 100644 --- a/frontend/app/features/settings/pages/plans/plans-page.component.scss +++ b/frontend/app/features/settings/pages/plans/plans-page.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .plan { & { margin: .5rem; diff --git a/frontend/app/features/settings/pages/roles/role-add-form.component.html b/frontend/app/features/settings/pages/roles/role-add-form.component.html new file mode 100644 index 000000000..f779a34dc --- /dev/null +++ b/frontend/app/features/settings/pages/roles/role-add-form.component.html @@ -0,0 +1,17 @@ + \ No newline at end of file diff --git a/frontend/app/features/settings/pages/roles/role-add-form.component.scss b/frontend/app/features/settings/pages/roles/role-add-form.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/features/settings/pages/roles/role-add-form.component.ts b/frontend/app/features/settings/pages/roles/role-add-form.component.ts index 7b011dd56..fc77d5f22 100644 --- a/frontend/app/features/settings/pages/roles/role-add-form.component.ts +++ b/frontend/app/features/settings/pages/roles/role-add-form.component.ts @@ -12,25 +12,8 @@ import { AddRoleForm, RolesState } from '@app/shared'; @Component({ selector: 'sqx-role-add-form', - template: ` - - `, + styleUrls: ['./role-add-form.component.scss'], + templateUrl: './role-add-form.component.html', changeDetection: ChangeDetectionStrategy.OnPush }) export class RoleAddFormComponent { diff --git a/frontend/app/features/settings/pages/roles/role.component.scss b/frontend/app/features/settings/pages/roles/role.component.scss index fc0c0ecff..00be886fc 100644 --- a/frontend/app/features/settings/pages/roles/role.component.scss +++ b/frontend/app/features/settings/pages/roles/role.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .form-group { & { margin-bottom: .375rem; diff --git a/frontend/app/features/settings/pages/roles/roles-page.component.scss b/frontend/app/features/settings/pages/roles/roles-page.component.scss index fbb752506..e69de29bb 100644 --- a/frontend/app/features/settings/pages/roles/roles-page.component.scss +++ b/frontend/app/features/settings/pages/roles/roles-page.component.scss @@ -1,2 +0,0 @@ -@import '_vars'; -@import '_mixins'; \ No newline at end of file diff --git a/frontend/app/features/settings/pages/workflows/workflow-add-form.component.html b/frontend/app/features/settings/pages/workflows/workflow-add-form.component.html new file mode 100644 index 000000000..bd4077e52 --- /dev/null +++ b/frontend/app/features/settings/pages/workflows/workflow-add-form.component.html @@ -0,0 +1,17 @@ + \ No newline at end of file diff --git a/frontend/app/features/settings/pages/workflows/workflow-add-form.component.scss b/frontend/app/features/settings/pages/workflows/workflow-add-form.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/features/settings/pages/workflows/workflow-add-form.component.ts b/frontend/app/features/settings/pages/workflows/workflow-add-form.component.ts index c5dcda55b..56f47c739 100644 --- a/frontend/app/features/settings/pages/workflows/workflow-add-form.component.ts +++ b/frontend/app/features/settings/pages/workflows/workflow-add-form.component.ts @@ -12,24 +12,8 @@ import { AddWorkflowForm, WorkflowsState } from '@app/shared'; @Component({ selector: 'sqx-workflow-add-form', - template: ` - `, + styleUrls: ['./workflow-add-form.component.scss'], + templateUrl: './workflow-add-form.component.html', changeDetection: ChangeDetectionStrategy.OnPush }) export class WorkflowAddFormComponent { diff --git a/frontend/app/features/settings/pages/workflows/workflow-step.component.html b/frontend/app/features/settings/pages/workflows/workflow-step.component.html index f33b2d332..310c499c0 100644 --- a/frontend/app/features/settings/pages/workflows/workflow-step.component.html +++ b/frontend/app/features/settings/pages/workflows/workflow-step.component.html @@ -1,7 +1,7 @@
-
-
@@ -40,7 +40,7 @@ [transition]="transition" [disabled]="disabled" [roles]="roles" - (remove)="emitTransitionRemove(transition)" + (remove)="transitionRemove.emit(transition)" (update)="changeTransition(transition, $event)"> @@ -56,7 +56,7 @@
-
diff --git a/frontend/app/features/settings/pages/workflows/workflow-step.component.scss b/frontend/app/features/settings/pages/workflows/workflow-step.component.scss index 48e11ccd5..57bdbb4e9 100644 --- a/frontend/app/features/settings/pages/workflows/workflow-step.component.scss +++ b/frontend/app/features/settings/pages/workflows/workflow-step.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - :host ::ng-deep { .dashed { @include placeholder-color($color-theme-secondary); diff --git a/frontend/app/features/settings/pages/workflows/workflow-step.component.ts b/frontend/app/features/settings/pages/workflows/workflow-step.component.ts index e9c38357b..bf83e7b00 100644 --- a/frontend/app/features/settings/pages/workflows/workflow-step.component.ts +++ b/frontend/app/features/settings/pages/workflows/workflow-step.component.ts @@ -95,22 +95,6 @@ export class WorkflowStepComponent implements OnChanges { this.update.emit({ noUpdateRoles }); } - public emitMakeInitial() { - this.makeInitial.emit(); - } - - public emitTransitionAdd(transition: WorkflowStep) { - this.transitionAdd.emit(transition); - } - - public emitTransitionRemove(transition: WorkflowTransition) { - this.transitionRemove.emit(transition); - } - - public emitRemove() { - this.remove.emit(); - } - public trackByTransition(index: number, transition: WorkflowTransition) { return transition.to; } diff --git a/frontend/app/features/settings/pages/workflows/workflow-transition.component.html b/frontend/app/features/settings/pages/workflows/workflow-transition.component.html index 8b5ef28c1..8b2163928 100644 --- a/frontend/app/features/settings/pages/workflows/workflow-transition.component.html +++ b/frontend/app/features/settings/pages/workflows/workflow-transition.component.html @@ -36,7 +36,7 @@
-
diff --git a/frontend/app/features/settings/pages/workflows/workflow-transition.component.scss b/frontend/app/features/settings/pages/workflows/workflow-transition.component.scss index c7f0dcea7..e95cb54fd 100644 --- a/frontend/app/features/settings/pages/workflows/workflow-transition.component.scss +++ b/frontend/app/features/settings/pages/workflows/workflow-transition.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .select-placeholder { @include absolute(0, 0, 0, 0); border: 1px solid transparent; diff --git a/frontend/app/features/settings/pages/workflows/workflow-transition.component.ts b/frontend/app/features/settings/pages/workflows/workflow-transition.component.ts index 6167acb87..fab3a4519 100644 --- a/frontend/app/features/settings/pages/workflows/workflow-transition.component.ts +++ b/frontend/app/features/settings/pages/workflows/workflow-transition.component.ts @@ -44,10 +44,6 @@ export class WorkflowTransitionComponent { this.update.emit(({ roles: roles || [] }) as any); } - public emitRemove() { - this.remove.emit(); - } - public trackByRole(index: number, role: RoleDto) { return role.name; } diff --git a/frontend/app/features/settings/pages/workflows/workflow.component.scss b/frontend/app/features/settings/pages/workflows/workflow.component.scss index 94b651f0f..c33f9c527 100644 --- a/frontend/app/features/settings/pages/workflows/workflow.component.scss +++ b/frontend/app/features/settings/pages/workflows/workflow.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .table-items-row-details { &::before { right: 4.55rem; diff --git a/frontend/app/features/settings/pages/workflows/workflows-page.component.scss b/frontend/app/features/settings/pages/workflows/workflows-page.component.scss index ad50cdf61..84a5172a7 100644 --- a/frontend/app/features/settings/pages/workflows/workflows-page.component.scss +++ b/frontend/app/features/settings/pages/workflows/workflows-page.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .panel-alert { ul { margin: 0; diff --git a/frontend/app/features/settings/settings-area.component.scss b/frontend/app/features/settings/settings-area.component.scss index 84549cd07..aec0f6a0e 100644 --- a/frontend/app/features/settings/settings-area.component.scss +++ b/frontend/app/features/settings/settings-area.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .nav-link { padding-bottom: .6rem; padding-top: .6rem; diff --git a/frontend/app/framework/angular/avatar.component.html b/frontend/app/framework/angular/avatar.component.html new file mode 100644 index 000000000..faf81dfab --- /dev/null +++ b/frontend/app/framework/angular/avatar.component.html @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/frontend/app/framework/angular/avatar.component.scss b/frontend/app/framework/angular/avatar.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/framework/angular/avatar.component.ts b/frontend/app/framework/angular/avatar.component.ts index 63f02bbab..13e5ffd4c 100644 --- a/frontend/app/framework/angular/avatar.component.ts +++ b/frontend/app/framework/angular/avatar.component.ts @@ -5,19 +5,15 @@ * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. */ -import { Component, Input, OnChanges } from '@angular/core'; +import { ChangeDetectionStrategy, Component, Input, OnChanges, SimpleChanges } from '@angular/core'; import { picasso } from '@app/framework/internal'; @Component({ selector: 'sqx-avatar', - template: ` - - ` + styleUrls: ['./avatar.component.scss'], + templateUrl: './avatar.component.html', + changeDetection: ChangeDetectionStrategy.OnPush }) export class AvatarComponent implements OnChanges { @Input() @@ -30,21 +26,23 @@ export class AvatarComponent implements OnChanges { public size = 50; public imageSource: string | null; - public sizeInPx: string; + public imageSize = '50px'; - public ngOnChanges() { - this.imageSource = this.image || this.createSvg(); + public ngOnChanges(changes: SimpleChanges) { + if (changes['image'] || changes['identifier']) { + this.imageSource = this.image || this.createSvg(); + } - this.sizeInPx = `${this.size}px`; + if (changes['size']) { + this.imageSize = `${this.size}px`; + } } private createSvg() { - if (!this.identifier) { + if (this.identifier) { + return `data:image/svg+xml;utf8,${picasso(this.identifier)}`; + } else { return null; } - - const svg = picasso(this.identifier); - - return `data:image/svg+xml;utf8,${svg}`; } } \ No newline at end of file diff --git a/frontend/app/framework/angular/code.component.scss b/frontend/app/framework/angular/code.component.scss index 84af62494..dc68261f9 100644 --- a/frontend/app/framework/angular/code.component.scss +++ b/frontend/app/framework/angular/code.component.scss @@ -1,6 +1,3 @@ -@import '_mixins'; -@import '_vars'; - .code { background: $color-code-background; margin: .25rem 0; diff --git a/frontend/app/framework/angular/drag-helper.ts b/frontend/app/framework/angular/drag-helper.ts index 5b5da47ea..fa4620fe3 100644 --- a/frontend/app/framework/angular/drag-helper.ts +++ b/frontend/app/framework/angular/drag-helper.ts @@ -5,6 +5,8 @@ * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. */ +// tslint:disable: prefer-for-of + import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop'; import { Types } from './../utils/types'; @@ -24,7 +26,6 @@ export function getFiles(files: FileList | ReadonlyArray) { const result: File[] = []; - // tslint:disable-next-line: prefer-for-of for (let i = 0; i < files.length; i++) { result.push(files[i]); } diff --git a/frontend/app/framework/angular/forms/control-errors.component.scss b/frontend/app/framework/angular/forms/control-errors.component.scss index cb1f07fcd..bef9e52d5 100644 --- a/frontend/app/framework/angular/forms/control-errors.component.scss +++ b/frontend/app/framework/angular/forms/control-errors.component.scss @@ -1,6 +1,3 @@ -@import '_mixins'; -@import '_vars'; - :host { @include force-width(100%); align-self: flex-start; diff --git a/frontend/app/framework/angular/forms/editable-title.component.scss b/frontend/app/framework/angular/forms/editable-title.component.scss index b59469469..9fd482411 100644 --- a/frontend/app/framework/angular/forms/editable-title.component.scss +++ b/frontend/app/framework/angular/forms/editable-title.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .title { & { @include hover-visible('.title-edit', inline); diff --git a/frontend/app/framework/angular/forms/autocomplete.component.html b/frontend/app/framework/angular/forms/editors/autocomplete.component.html similarity index 100% rename from frontend/app/framework/angular/forms/autocomplete.component.html rename to frontend/app/framework/angular/forms/editors/autocomplete.component.html diff --git a/frontend/app/framework/angular/forms/autocomplete.component.scss b/frontend/app/framework/angular/forms/editors/autocomplete.component.scss similarity index 50% rename from frontend/app/framework/angular/forms/autocomplete.component.scss rename to frontend/app/framework/angular/forms/editors/autocomplete.component.scss index 116837ee0..443b8840f 100644 --- a/frontend/app/framework/angular/forms/autocomplete.component.scss +++ b/frontend/app/framework/angular/forms/editors/autocomplete.component.scss @@ -1,6 +1,3 @@ -@import '_mixins'; -@import '_vars'; - .control-dropdown { width: 18rem; } \ No newline at end of file diff --git a/frontend/app/framework/angular/forms/autocomplete.component.ts b/frontend/app/framework/angular/forms/editors/autocomplete.component.ts similarity index 97% rename from frontend/app/framework/angular/forms/autocomplete.component.ts rename to frontend/app/framework/angular/forms/editors/autocomplete.component.ts index f09627086..c5b2fd109 100644 --- a/frontend/app/framework/angular/forms/autocomplete.component.ts +++ b/frontend/app/framework/angular/forms/editors/autocomplete.component.ts @@ -35,14 +35,15 @@ interface State { selector: 'sqx-autocomplete', styleUrls: ['./autocomplete.component.scss'], templateUrl: './autocomplete.component.html', - providers: [SQX_AUTOCOMPLETE_CONTROL_VALUE_ACCESSOR], + providers: [ + SQX_AUTOCOMPLETE_CONTROL_VALUE_ACCESSOR + ], animations: [ fadeAnimation ], changeDetection: ChangeDetectionStrategy.OnPush }) -// tslint:disable-next-line: readonly-array -export class AutocompleteComponent extends StatefulControlComponent implements OnInit { +export class AutocompleteComponent extends StatefulControlComponent> implements OnInit { @Input() public source: AutocompleteSource; diff --git a/frontend/app/framework/angular/forms/checkbox-group.component.html b/frontend/app/framework/angular/forms/editors/checkbox-group.component.html similarity index 100% rename from frontend/app/framework/angular/forms/checkbox-group.component.html rename to frontend/app/framework/angular/forms/editors/checkbox-group.component.html diff --git a/frontend/app/framework/angular/forms/checkbox-group.component.scss b/frontend/app/framework/angular/forms/editors/checkbox-group.component.scss similarity index 80% rename from frontend/app/framework/angular/forms/checkbox-group.component.scss rename to frontend/app/framework/angular/forms/editors/checkbox-group.component.scss index ae6844c67..ce04eb06c 100644 --- a/frontend/app/framework/angular/forms/checkbox-group.component.scss +++ b/frontend/app/framework/angular/forms/editors/checkbox-group.component.scss @@ -1,6 +1,3 @@ -@import '_mixins'; -@import '_vars'; - .form-check { display: block; margin-bottom: .5rem; diff --git a/frontend/app/framework/angular/forms/checkbox-group.component.ts b/frontend/app/framework/angular/forms/editors/checkbox-group.component.ts similarity index 96% rename from frontend/app/framework/angular/forms/checkbox-group.component.ts rename to frontend/app/framework/angular/forms/editors/checkbox-group.component.ts index 1e9cf369e..1434a68bf 100644 --- a/frontend/app/framework/angular/forms/checkbox-group.component.ts +++ b/frontend/app/framework/angular/forms/editors/checkbox-group.component.ts @@ -26,7 +26,9 @@ interface State { selector: 'sqx-checkbox-group', styleUrls: ['./checkbox-group.component.scss'], templateUrl: './checkbox-group.component.html', - providers: [SQX_CHECKBOX_GROUP_CONTROL_VALUE_ACCESSOR], + providers: [ + SQX_CHECKBOX_GROUP_CONTROL_VALUE_ACCESSOR + ], changeDetection: ChangeDetectionStrategy.OnPush }) // tslint:disable-next-line: readonly-array diff --git a/frontend/app/framework/angular/forms/code-editor.component.html b/frontend/app/framework/angular/forms/editors/code-editor.component.html similarity index 100% rename from frontend/app/framework/angular/forms/code-editor.component.html rename to frontend/app/framework/angular/forms/editors/code-editor.component.html diff --git a/frontend/app/framework/angular/forms/code-editor.component.scss b/frontend/app/framework/angular/forms/editors/code-editor.component.scss similarity index 92% rename from frontend/app/framework/angular/forms/code-editor.component.scss rename to frontend/app/framework/angular/forms/editors/code-editor.component.scss index f8a4a578b..d2eab8fae 100644 --- a/frontend/app/framework/angular/forms/code-editor.component.scss +++ b/frontend/app/framework/angular/forms/editors/code-editor.component.scss @@ -1,6 +1,3 @@ -@import '_mixins'; -@import '_vars'; - // sass-lint:disable class-name-format :host ::ng-deep { diff --git a/frontend/app/framework/angular/forms/code-editor.component.ts b/frontend/app/framework/angular/forms/editors/code-editor.component.ts similarity index 97% rename from frontend/app/framework/angular/forms/code-editor.component.ts rename to frontend/app/framework/angular/forms/editors/code-editor.component.ts index 677b3d216..5ea0421d1 100644 --- a/frontend/app/framework/angular/forms/code-editor.component.ts +++ b/frontend/app/framework/angular/forms/editors/code-editor.component.ts @@ -26,7 +26,9 @@ export const SQX_CODE_EDITOR_CONTROL_VALUE_ACCESSOR: any = { selector: 'sqx-code-editor', styleUrls: ['./code-editor.component.scss'], templateUrl: './code-editor.component.html', - providers: [SQX_CODE_EDITOR_CONTROL_VALUE_ACCESSOR], + providers: [ + SQX_CODE_EDITOR_CONTROL_VALUE_ACCESSOR + ], changeDetection: ChangeDetectionStrategy.OnPush }) export class CodeEditorComponent extends StatefulControlComponent implements AfterViewInit { diff --git a/frontend/app/framework/angular/forms/color-picker.component.html b/frontend/app/framework/angular/forms/editors/color-picker.component.html similarity index 100% rename from frontend/app/framework/angular/forms/color-picker.component.html rename to frontend/app/framework/angular/forms/editors/color-picker.component.html diff --git a/frontend/app/framework/angular/forms/color-picker.component.scss b/frontend/app/framework/angular/forms/editors/color-picker.component.scss similarity index 91% rename from frontend/app/framework/angular/forms/color-picker.component.scss rename to frontend/app/framework/angular/forms/editors/color-picker.component.scss index 16e00d4bb..d967a078c 100644 --- a/frontend/app/framework/angular/forms/color-picker.component.scss +++ b/frontend/app/framework/angular/forms/editors/color-picker.component.scss @@ -1,6 +1,3 @@ -@import '_mixins'; -@import '_vars'; - :host ::ng-deep { .color-picker { & { diff --git a/frontend/app/framework/angular/forms/color-picker.component.ts b/frontend/app/framework/angular/forms/editors/color-picker.component.ts similarity index 97% rename from frontend/app/framework/angular/forms/color-picker.component.ts rename to frontend/app/framework/angular/forms/editors/color-picker.component.ts index 8b6dc1172..8a0a30fc9 100644 --- a/frontend/app/framework/angular/forms/color-picker.component.ts +++ b/frontend/app/framework/angular/forms/editors/color-picker.component.ts @@ -28,7 +28,9 @@ interface State { selector: 'sqx-color-picker', styleUrls: ['./color-picker.component.scss'], templateUrl: './color-picker.component.html', - providers: [SQX_COLOR_PICKER_CONTROL_VALUE_ACCESSOR], + providers: [ + SQX_COLOR_PICKER_CONTROL_VALUE_ACCESSOR + ], changeDetection: ChangeDetectionStrategy.OnPush }) export class ColorPickerComponent extends StatefulControlComponent { diff --git a/frontend/app/framework/angular/forms/date-time-editor.component.html b/frontend/app/framework/angular/forms/editors/date-time-editor.component.html similarity index 100% rename from frontend/app/framework/angular/forms/date-time-editor.component.html rename to frontend/app/framework/angular/forms/editors/date-time-editor.component.html diff --git a/frontend/app/framework/angular/forms/date-time-editor.component.scss b/frontend/app/framework/angular/forms/editors/date-time-editor.component.scss similarity index 95% rename from frontend/app/framework/angular/forms/date-time-editor.component.scss rename to frontend/app/framework/angular/forms/editors/date-time-editor.component.scss index 363464f90..5e3de2b36 100644 --- a/frontend/app/framework/angular/forms/date-time-editor.component.scss +++ b/frontend/app/framework/angular/forms/editors/date-time-editor.component.scss @@ -1,6 +1,3 @@ -@import '_mixins'; -@import '_vars'; - :host(.ng-invalid) { &.ng-dirty { .form-control { diff --git a/frontend/app/framework/angular/forms/date-time-editor.component.ts b/frontend/app/framework/angular/forms/editors/date-time-editor.component.ts similarity index 98% rename from frontend/app/framework/angular/forms/date-time-editor.component.ts rename to frontend/app/framework/angular/forms/editors/date-time-editor.component.ts index 0070ddb2a..606bf3d4e 100644 --- a/frontend/app/framework/angular/forms/date-time-editor.component.ts +++ b/frontend/app/framework/angular/forms/editors/date-time-editor.component.ts @@ -29,7 +29,9 @@ const NO_EMIT = { emitEvent: false }; selector: 'sqx-date-time-editor', styleUrls: ['./date-time-editor.component.scss'], templateUrl: './date-time-editor.component.html', - providers: [SQX_DATE_TIME_EDITOR_CONTROL_VALUE_ACCESSOR], + providers: [ + SQX_DATE_TIME_EDITOR_CONTROL_VALUE_ACCESSOR + ], changeDetection: ChangeDetectionStrategy.OnPush }) export class DateTimeEditorComponent extends StatefulControlComponent<{}, string | null> implements OnInit, AfterViewInit { diff --git a/frontend/app/framework/angular/forms/dropdown.component.html b/frontend/app/framework/angular/forms/editors/dropdown.component.html similarity index 100% rename from frontend/app/framework/angular/forms/dropdown.component.html rename to frontend/app/framework/angular/forms/editors/dropdown.component.html diff --git a/frontend/app/framework/angular/forms/dropdown.component.scss b/frontend/app/framework/angular/forms/editors/dropdown.component.scss similarity index 96% rename from frontend/app/framework/angular/forms/dropdown.component.scss rename to frontend/app/framework/angular/forms/editors/dropdown.component.scss index 3727e203c..14b32416f 100644 --- a/frontend/app/framework/angular/forms/dropdown.component.scss +++ b/frontend/app/framework/angular/forms/editors/dropdown.component.scss @@ -1,6 +1,3 @@ -@import '_mixins'; -@import '_vars'; - $color-input-disabled: #eef1f4; .form-control { diff --git a/frontend/app/framework/angular/forms/dropdown.component.ts b/frontend/app/framework/angular/forms/editors/dropdown.component.ts similarity index 96% rename from frontend/app/framework/angular/forms/dropdown.component.ts rename to frontend/app/framework/angular/forms/editors/dropdown.component.ts index 88f7f8b2c..59ea990f0 100644 --- a/frontend/app/framework/angular/forms/dropdown.component.ts +++ b/frontend/app/framework/angular/forms/editors/dropdown.component.ts @@ -31,11 +31,12 @@ interface State { selector: 'sqx-dropdown', styleUrls: ['./dropdown.component.scss'], templateUrl: './dropdown.component.html', - providers: [SQX_DROPDOWN_CONTROL_VALUE_ACCESSOR], + providers: [ + SQX_DROPDOWN_CONTROL_VALUE_ACCESSOR + ], changeDetection: ChangeDetectionStrategy.OnPush }) -// tslint:disable-next-line: readonly-array -export class DropdownComponent extends StatefulControlComponent implements AfterContentInit, ControlValueAccessor, OnChanges, OnInit { +export class DropdownComponent extends StatefulControlComponent> implements AfterContentInit, ControlValueAccessor, OnChanges, OnInit { @Input() public items: ReadonlyArray = []; diff --git a/frontend/app/framework/angular/forms/iframe-editor.component.html b/frontend/app/framework/angular/forms/editors/iframe-editor.component.html similarity index 100% rename from frontend/app/framework/angular/forms/iframe-editor.component.html rename to frontend/app/framework/angular/forms/editors/iframe-editor.component.html diff --git a/frontend/app/framework/angular/forms/iframe-editor.component.scss b/frontend/app/framework/angular/forms/editors/iframe-editor.component.scss similarity index 63% rename from frontend/app/framework/angular/forms/iframe-editor.component.scss rename to frontend/app/framework/angular/forms/editors/iframe-editor.component.scss index e3678801d..ae2678456 100644 --- a/frontend/app/framework/angular/forms/iframe-editor.component.scss +++ b/frontend/app/framework/angular/forms/editors/iframe-editor.component.scss @@ -1,6 +1,3 @@ -@import '_mixins'; -@import '_vars'; - iframe { background: 0; border: 0; diff --git a/frontend/app/framework/angular/forms/iframe-editor.component.ts b/frontend/app/framework/angular/forms/editors/iframe-editor.component.ts similarity index 96% rename from frontend/app/framework/angular/forms/iframe-editor.component.ts rename to frontend/app/framework/angular/forms/editors/iframe-editor.component.ts index a57b51651..7c6a8d518 100644 --- a/frontend/app/framework/angular/forms/iframe-editor.component.ts +++ b/frontend/app/framework/angular/forms/editors/iframe-editor.component.ts @@ -18,7 +18,9 @@ export const SQX_IFRAME_EDITOR_CONTROL_VALUE_ACCESSOR: any = { selector: 'sqx-iframe-editor', styleUrls: ['./iframe-editor.component.scss'], templateUrl: './iframe-editor.component.html', - providers: [SQX_IFRAME_EDITOR_CONTROL_VALUE_ACCESSOR], + providers: [ + SQX_IFRAME_EDITOR_CONTROL_VALUE_ACCESSOR + ], changeDetection: ChangeDetectionStrategy.OnPush }) export class IFrameEditorComponent extends StatefulControlComponent implements OnChanges, AfterViewInit { @@ -82,7 +84,7 @@ export class IFrameEditorComponent extends StatefulControlComponent im } else if (type === 'valueChanged') { const { value } = event.data; - if (!Types.jsJsonEquals(this.value, value)) { + if (!Types.equals(this.value, value)) { this.value = value; this.callChange(value); diff --git a/frontend/app/framework/angular/forms/json-editor.component.html b/frontend/app/framework/angular/forms/editors/json-editor.component.html similarity index 100% rename from frontend/app/framework/angular/forms/json-editor.component.html rename to frontend/app/framework/angular/forms/editors/json-editor.component.html diff --git a/frontend/app/framework/angular/forms/json-editor.component.scss b/frontend/app/framework/angular/forms/editors/json-editor.component.scss similarity index 92% rename from frontend/app/framework/angular/forms/json-editor.component.scss rename to frontend/app/framework/angular/forms/editors/json-editor.component.scss index f0c225b44..56197ee78 100644 --- a/frontend/app/framework/angular/forms/json-editor.component.scss +++ b/frontend/app/framework/angular/forms/editors/json-editor.component.scss @@ -1,6 +1,3 @@ -@import '_mixins'; -@import '_vars'; - // sass-lint:disable class-name-format $editor-height: 30rem; diff --git a/frontend/app/framework/angular/forms/json-editor.component.ts b/frontend/app/framework/angular/forms/editors/json-editor.component.ts similarity index 98% rename from frontend/app/framework/angular/forms/json-editor.component.ts rename to frontend/app/framework/angular/forms/editors/json-editor.component.ts index 4c9f301f0..fc3b6623d 100644 --- a/frontend/app/framework/angular/forms/json-editor.component.ts +++ b/frontend/app/framework/angular/forms/editors/json-editor.component.ts @@ -22,7 +22,9 @@ export const SQX_JSON_EDITOR_CONTROL_VALUE_ACCESSOR: any = { selector: 'sqx-json-editor', styleUrls: ['./json-editor.component.scss'], templateUrl: './json-editor.component.html', - providers: [SQX_JSON_EDITOR_CONTROL_VALUE_ACCESSOR], + providers: [ + SQX_JSON_EDITOR_CONTROL_VALUE_ACCESSOR + ], changeDetection: ChangeDetectionStrategy.OnPush }) export class JsonEditorComponent extends StatefulControlComponent<{}, string> implements AfterViewInit { diff --git a/frontend/app/framework/angular/forms/stars.component.html b/frontend/app/framework/angular/forms/editors/stars.component.html similarity index 100% rename from frontend/app/framework/angular/forms/stars.component.html rename to frontend/app/framework/angular/forms/editors/stars.component.html diff --git a/frontend/app/framework/angular/forms/stars.component.scss b/frontend/app/framework/angular/forms/editors/stars.component.scss similarity index 93% rename from frontend/app/framework/angular/forms/stars.component.scss rename to frontend/app/framework/angular/forms/editors/stars.component.scss index 557ae22af..d4a11f50d 100644 --- a/frontend/app/framework/angular/forms/stars.component.scss +++ b/frontend/app/framework/angular/forms/editors/stars.component.scss @@ -1,6 +1,3 @@ -@import '_mixins'; -@import '_vars'; - $color-gold: #ffd700; .many-stars { diff --git a/frontend/app/framework/angular/forms/stars.component.ts b/frontend/app/framework/angular/forms/editors/stars.component.ts similarity index 97% rename from frontend/app/framework/angular/forms/stars.component.ts rename to frontend/app/framework/angular/forms/editors/stars.component.ts index b55d42ef4..a52f98102 100644 --- a/frontend/app/framework/angular/forms/stars.component.ts +++ b/frontend/app/framework/angular/forms/editors/stars.component.ts @@ -25,7 +25,9 @@ interface State { selector: 'sqx-stars', styleUrls: ['./stars.component.scss'], templateUrl: './stars.component.html', - providers: [SQX_STARS_CONTROL_VALUE_ACCESSOR], + providers: [ + SQX_STARS_CONTROL_VALUE_ACCESSOR + ], changeDetection: ChangeDetectionStrategy.OnPush }) export class StarsComponent extends StatefulControlComponent { diff --git a/frontend/app/framework/angular/forms/tag-editor.component.html b/frontend/app/framework/angular/forms/editors/tag-editor.component.html similarity index 100% rename from frontend/app/framework/angular/forms/tag-editor.component.html rename to frontend/app/framework/angular/forms/editors/tag-editor.component.html diff --git a/frontend/app/framework/angular/forms/tag-editor.component.scss b/frontend/app/framework/angular/forms/editors/tag-editor.component.scss similarity index 98% rename from frontend/app/framework/angular/forms/tag-editor.component.scss rename to frontend/app/framework/angular/forms/editors/tag-editor.component.scss index 8aa3f205b..02bcfb98f 100644 --- a/frontend/app/framework/angular/forms/tag-editor.component.scss +++ b/frontend/app/framework/angular/forms/editors/tag-editor.component.scss @@ -1,6 +1,3 @@ -@import '_mixins'; -@import '_vars'; - $focus-color: #b3d3ff; $focus-shadow: rgba(51, 137, 255, .25); diff --git a/frontend/app/framework/angular/forms/tag-editor.component.ts b/frontend/app/framework/angular/forms/editors/tag-editor.component.ts similarity index 98% rename from frontend/app/framework/angular/forms/tag-editor.component.ts rename to frontend/app/framework/angular/forms/editors/tag-editor.component.ts index 09d97b40a..6d034ee10 100644 --- a/frontend/app/framework/angular/forms/tag-editor.component.ts +++ b/frontend/app/framework/angular/forms/editors/tag-editor.component.ts @@ -138,14 +138,15 @@ interface State { selector: 'sqx-tag-editor', styleUrls: ['./tag-editor.component.scss'], templateUrl: './tag-editor.component.html', - providers: [SQX_TAG_EDITOR_CONTROL_VALUE_ACCESSOR], + providers: [ + SQX_TAG_EDITOR_CONTROL_VALUE_ACCESSOR + ], animations: [ fadeAnimation ], changeDetection: ChangeDetectionStrategy.OnPush }) -// tslint:disable-next-line: readonly-array -export class TagEditorComponent extends StatefulControlComponent implements AfterViewInit, OnChanges, OnInit { +export class TagEditorComponent extends StatefulControlComponent> implements AfterViewInit, OnChanges, OnInit { private latestValue: any; @ViewChild('form', { static: false }) diff --git a/frontend/app/framework/angular/forms/toggle.component.html b/frontend/app/framework/angular/forms/editors/toggle.component.html similarity index 100% rename from frontend/app/framework/angular/forms/toggle.component.html rename to frontend/app/framework/angular/forms/editors/toggle.component.html diff --git a/frontend/app/framework/angular/forms/toggle.component.scss b/frontend/app/framework/angular/forms/editors/toggle.component.scss similarity index 97% rename from frontend/app/framework/angular/forms/toggle.component.scss rename to frontend/app/framework/angular/forms/editors/toggle.component.scss index 1af4cb40a..c626b8ebe 100644 --- a/frontend/app/framework/angular/forms/toggle.component.scss +++ b/frontend/app/framework/angular/forms/editors/toggle.component.scss @@ -1,6 +1,3 @@ -@import '_mixins'; -@import '_vars'; - $toggle-width: 2.2rem; $toggle-height: 1.25rem; $toggle-button-size: $toggle-height - .25rem; diff --git a/frontend/app/framework/angular/forms/toggle.component.ts b/frontend/app/framework/angular/forms/editors/toggle.component.ts similarity index 96% rename from frontend/app/framework/angular/forms/toggle.component.ts rename to frontend/app/framework/angular/forms/editors/toggle.component.ts index 33e53d9bf..338665c76 100644 --- a/frontend/app/framework/angular/forms/toggle.component.ts +++ b/frontend/app/framework/angular/forms/editors/toggle.component.ts @@ -22,7 +22,9 @@ interface State { selector: 'sqx-toggle', styleUrls: ['./toggle.component.scss'], templateUrl: './toggle.component.html', - providers: [SQX_TOGGLE_CONTROL_VALUE_ACCESSOR] + providers: [ + SQX_TOGGLE_CONTROL_VALUE_ACCESSOR + ] }) export class ToggleComponent extends StatefulControlComponent { @Input() diff --git a/frontend/app/framework/angular/forms/form-alert.component.html b/frontend/app/framework/angular/forms/form-alert.component.html new file mode 100644 index 000000000..b8ad2ef50 --- /dev/null +++ b/frontend/app/framework/angular/forms/form-alert.component.html @@ -0,0 +1,3 @@ +
+ +
\ No newline at end of file diff --git a/frontend/app/framework/angular/forms/form-alert.component.scss b/frontend/app/framework/angular/forms/form-alert.component.scss new file mode 100644 index 000000000..71d37f104 --- /dev/null +++ b/frontend/app/framework/angular/forms/form-alert.component.scss @@ -0,0 +1,11 @@ +$color: #fcfeff; + +:host { + display: block; + max-width: 100%; + min-width: 100%; +} + +.light { + background: $color; +} \ No newline at end of file diff --git a/frontend/app/framework/angular/forms/form-alert.component.ts b/frontend/app/framework/angular/forms/form-alert.component.ts index 4187c60a9..e9dc53386 100644 --- a/frontend/app/framework/angular/forms/form-alert.component.ts +++ b/frontend/app/framework/angular/forms/form-alert.component.ts @@ -9,22 +9,8 @@ import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; @Component({ selector: 'sqx-form-alert', - template: ` -
- -
- `, - styles: [` - :host { - display: block; - min-width: 100%; - max-width: 100%; - } - - .light { - background: #fcfeff; - } - `], + styleUrls: ['./form-alert.component.scss'], + templateUrl: './form-alert.component.html', changeDetection: ChangeDetectionStrategy.OnPush }) export class FormAlertComponent { diff --git a/frontend/app/framework/angular/forms/form-error.component.html b/frontend/app/framework/angular/forms/form-error.component.html new file mode 100644 index 000000000..0c73a2a81 --- /dev/null +++ b/frontend/app/framework/angular/forms/form-error.component.html @@ -0,0 +1,10 @@ + +
+
+ + + +
+
+
+
\ No newline at end of file diff --git a/frontend/app/framework/angular/forms/form-error.component.scss b/frontend/app/framework/angular/forms/form-error.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/framework/angular/forms/form-error.component.ts b/frontend/app/framework/angular/forms/form-error.component.ts index bf2b1bd37..56c7b9ba8 100644 --- a/frontend/app/framework/angular/forms/form-error.component.ts +++ b/frontend/app/framework/angular/forms/form-error.component.ts @@ -11,18 +11,8 @@ import { ErrorDto } from '@app/framework/internal'; @Component({ selector: 'sqx-form-error', - template: ` - -
-
- - - -
-
-
-
- `, + styleUrls: ['./form-error.component.scss'], + templateUrl: './form-error.component.html', changeDetection: ChangeDetectionStrategy.OnPush }) export class FormErrorComponent implements OnChanges { diff --git a/frontend/app/framework/angular/forms/form-hint.component.html b/frontend/app/framework/angular/forms/form-hint.component.html new file mode 100644 index 000000000..fd80720df --- /dev/null +++ b/frontend/app/framework/angular/forms/form-hint.component.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/frontend/app/framework/angular/forms/form-hint.component.scss b/frontend/app/framework/angular/forms/form-hint.component.scss new file mode 100644 index 000000000..0d5449b5b --- /dev/null +++ b/frontend/app/framework/angular/forms/form-hint.component.scss @@ -0,0 +1,11 @@ +:host { + & { + display: block; + margin-bottom: .5rem; + margin-top: 0; + } + + &:last-child { + margin-bottom: 0; + } +} \ No newline at end of file diff --git a/frontend/app/framework/angular/forms/form-hint.component.ts b/frontend/app/framework/angular/forms/form-hint.component.ts index 0decb7870..c82d2ef2e 100644 --- a/frontend/app/framework/angular/forms/form-hint.component.ts +++ b/frontend/app/framework/angular/forms/form-hint.component.ts @@ -9,22 +9,8 @@ import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; @Component({ selector: 'sqx-form-hint', - template: ` - - - - `, - styles: [` - :host { - display: block; - margin-top: 0; - margin-bottom: .5rem - } - - :host::last-child { - margin-bottom: 0; - }` - ], + styleUrls: ['./form-hint.component.scss'], + templateUrl: './form-hint.component.html', changeDetection: ChangeDetectionStrategy.OnPush }) export class FormHintComponent { diff --git a/frontend/app/framework/angular/forms/indeterminate-value.directive.ts b/frontend/app/framework/angular/forms/indeterminate-value.directive.ts index 5bcf73c68..e6017136e 100644 --- a/frontend/app/framework/angular/forms/indeterminate-value.directive.ts +++ b/frontend/app/framework/angular/forms/indeterminate-value.directive.ts @@ -16,7 +16,9 @@ export const SQX_INDETERMINATE_VALUE_CONTROL_VALUE_ACCESSOR: any = { @Directive({ selector: '[sqxIndeterminateValue]', - providers: [SQX_INDETERMINATE_VALUE_CONTROL_VALUE_ACCESSOR] + providers: [ + SQX_INDETERMINATE_VALUE_CONTROL_VALUE_ACCESSOR + ] }) export class IndeterminateValueDirective implements ControlValueAccessor { private callChange = (v: any) => { /* NOOP */ }; diff --git a/frontend/app/framework/angular/forms/transform-input.directive.ts b/frontend/app/framework/angular/forms/transform-input.directive.ts index 44fded675..490e6a9c9 100644 --- a/frontend/app/framework/angular/forms/transform-input.directive.ts +++ b/frontend/app/framework/angular/forms/transform-input.directive.ts @@ -26,7 +26,9 @@ export const SQX_TRANSFORM_INPUT_VALUE_ACCESSOR: any = { @Directive({ selector: '[sqxTransformInput]', - providers: [SQX_TRANSFORM_INPUT_VALUE_ACCESSOR] + providers: [ + SQX_TRANSFORM_INPUT_VALUE_ACCESSOR + ] }) export class TransformInputDirective implements ControlValueAccessor { private callChange = (v: any) => { /* NOOP */ }; diff --git a/frontend/app/framework/angular/list-view.component.scss b/frontend/app/framework/angular/list-view.component.scss index 2766c5663..933f46a9a 100644 --- a/frontend/app/framework/angular/list-view.component.scss +++ b/frontend/app/framework/angular/list-view.component.scss @@ -1,6 +1,3 @@ -@import '_mixins'; -@import '_vars'; - :host { display: flex; flex-direction: column; diff --git a/frontend/app/framework/angular/modals/dialog-renderer.component.scss b/frontend/app/framework/angular/modals/dialog-renderer.component.scss index c486e537c..2f91d7375 100644 --- a/frontend/app/framework/angular/modals/dialog-renderer.component.scss +++ b/frontend/app/framework/angular/modals/dialog-renderer.component.scss @@ -1,6 +1,3 @@ -@import '_mixins'; -@import '_vars'; - // sass-lint:disable single-line-per-selector .notification-container { diff --git a/frontend/app/framework/angular/modals/modal-dialog.component.html b/frontend/app/framework/angular/modals/modal-dialog.component.html index 0e24d5628..8134719ed 100644 --- a/frontend/app/framework/angular/modals/modal-dialog.component.html +++ b/frontend/app/framework/angular/modals/modal-dialog.component.html @@ -6,7 +6,7 @@ -
@@ -28,4 +28,4 @@
- \ No newline at end of file + \ No newline at end of file diff --git a/frontend/app/framework/angular/modals/modal-dialog.component.scss b/frontend/app/framework/angular/modals/modal-dialog.component.scss index b0c4a1e0f..fd6e87b78 100644 --- a/frontend/app/framework/angular/modals/modal-dialog.component.scss +++ b/frontend/app/framework/angular/modals/modal-dialog.component.scss @@ -1,6 +1,3 @@ -@import '_mixins'; -@import '_vars'; - .modal { display: block; } diff --git a/frontend/app/framework/angular/modals/modal-dialog.component.ts b/frontend/app/framework/angular/modals/modal-dialog.component.ts index eaa3411fb..8877839ec 100644 --- a/frontend/app/framework/angular/modals/modal-dialog.component.ts +++ b/frontend/app/framework/angular/modals/modal-dialog.component.ts @@ -78,8 +78,4 @@ export class ModalDialogComponent implements AfterViewInit { } } } - - public emitClose() { - this.close.emit(); - } } \ No newline at end of file diff --git a/frontend/app/framework/angular/modals/onboarding-tooltip.component.scss b/frontend/app/framework/angular/modals/onboarding-tooltip.component.scss index f29416548..13f9381e0 100644 --- a/frontend/app/framework/angular/modals/onboarding-tooltip.component.scss +++ b/frontend/app/framework/angular/modals/onboarding-tooltip.component.scss @@ -1,6 +1,3 @@ -@import '_mixins'; -@import '_vars'; - $hide-shadow: rgba(0, 0, 0, .5); .onboarding { diff --git a/frontend/app/framework/angular/modals/root-view.component.html b/frontend/app/framework/angular/modals/root-view.component.html new file mode 100644 index 000000000..56146ad9f --- /dev/null +++ b/frontend/app/framework/angular/modals/root-view.component.html @@ -0,0 +1,3 @@ +
+ + \ No newline at end of file diff --git a/frontend/app/framework/angular/modals/root-view.component.scss b/frontend/app/framework/angular/modals/root-view.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/framework/angular/modals/root-view.component.ts b/frontend/app/framework/angular/modals/root-view.component.ts index 6f306d703..5a53a9d79 100644 --- a/frontend/app/framework/angular/modals/root-view.component.ts +++ b/frontend/app/framework/angular/modals/root-view.component.ts @@ -9,11 +9,8 @@ import { ChangeDetectionStrategy, Component, ViewChild, ViewContainerRef } from @Component({ selector: 'sqx-root-view', - template: ` -
- - - `, + styleUrls: ['./root-view.component.scss'], + templateUrl: './root-view.component.html', changeDetection: ChangeDetectionStrategy.OnPush }) export class RootViewComponent { diff --git a/frontend/app/framework/angular/pager.component.scss b/frontend/app/framework/angular/pager.component.scss index e891b9183..af496b3dc 100644 --- a/frontend/app/framework/angular/pager.component.scss +++ b/frontend/app/framework/angular/pager.component.scss @@ -1,6 +1,3 @@ -@import '_mixins'; -@import '_vars'; - .form-control { display: inline-block; margin-right: 2rem; diff --git a/frontend/app/framework/angular/panel.component.html b/frontend/app/framework/angular/panel.component.html index 7e5eebb42..74df578eb 100644 --- a/frontend/app/framework/angular/panel.component.html +++ b/frontend/app/framework/angular/panel.component.html @@ -18,7 +18,7 @@ - + diff --git a/frontend/app/framework/angular/panel.component.scss b/frontend/app/framework/angular/panel.component.scss index 83949a038..acc0e5f5f 100644 --- a/frontend/app/framework/angular/panel.component.scss +++ b/frontend/app/framework/angular/panel.component.scss @@ -1,6 +1,3 @@ -@import '_mixins'; -@import '_vars'; - .no-padding { padding: 0; } \ No newline at end of file diff --git a/frontend/app/framework/angular/panel.component.ts b/frontend/app/framework/angular/panel.component.ts index ed62f38dc..94a9b3e32 100644 --- a/frontend/app/framework/angular/panel.component.ts +++ b/frontend/app/framework/angular/panel.component.ts @@ -143,8 +143,4 @@ export class PanelComponent implements AfterViewInit, OnChanges, OnDestroy, OnIn } } } - - public emitClose() { - this.close.emit(); - } } \ No newline at end of file diff --git a/frontend/app/framework/angular/status-icon.component.scss b/frontend/app/framework/angular/status-icon.component.scss index 25c837688..5aa11ffc4 100644 --- a/frontend/app/framework/angular/status-icon.component.scss +++ b/frontend/app/framework/angular/status-icon.component.scss @@ -1,6 +1,3 @@ -@import '_mixins'; -@import '_vars'; - $circle-size-sm: 1.6rem; $circle-size-lg: 2.8rem; diff --git a/frontend/app/framework/declarations.ts b/frontend/app/framework/declarations.ts index a9518ced4..f53416572 100644 --- a/frontend/app/framework/declarations.ts +++ b/frontend/app/framework/declarations.ts @@ -5,29 +5,30 @@ * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. */ -export * from './angular/forms/autocomplete.component'; -export * from './angular/forms/checkbox-group.component'; -export * from './angular/forms/code-editor.component'; -export * from './angular/forms/color-picker.component'; +export * from './angular/forms/editable-title.component'; +export * from './angular/forms/editors/autocomplete.component'; +export * from './angular/forms/editors/checkbox-group.component'; +export * from './angular/forms/editors/code-editor.component'; +export * from './angular/forms/editors/color-picker.component'; +export * from './angular/forms/editors/date-time-editor.component'; +export * from './angular/forms/editors/dropdown.component'; +export * from './angular/forms/editors/iframe-editor.component'; +export * from './angular/forms/editors/json-editor.component'; +export * from './angular/forms/editors/stars.component'; +export * from './angular/forms/editors/tag-editor.component'; +export * from './angular/forms/editors/toggle.component'; + export * from './angular/forms/confirm-click.directive'; export * from './angular/forms/control-errors.component'; export * from './angular/forms/copy.directive'; -export * from './angular/forms/date-time-editor.component'; -export * from './angular/forms/dropdown.component'; -export * from './angular/forms/editable-title.component'; export * from './angular/forms/file-drop.directive'; export * from './angular/forms/focus-on-init.directive'; export * from './angular/forms/form-alert.component'; export * from './angular/forms/form-error.component'; export * from './angular/forms/form-hint.component'; export * from './angular/forms/forms-helper'; -export * from './angular/forms/iframe-editor.component'; export * from './angular/forms/indeterminate-value.directive'; -export * from './angular/forms/json-editor.component'; export * from './angular/forms/progress-bar.component'; -export * from './angular/forms/stars.component'; -export * from './angular/forms/tag-editor.component'; -export * from './angular/forms/toggle.component'; export * from './angular/forms/transform-input.directive'; export * from './angular/forms/validators'; diff --git a/frontend/app/framework/services/analytics.service.ts b/frontend/app/framework/services/analytics.service.ts index 9bf3183c1..227898c06 100644 --- a/frontend/app/framework/services/analytics.service.ts +++ b/frontend/app/framework/services/analytics.service.ts @@ -5,6 +5,8 @@ * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. */ +// tslint:disable:only-arrow-functions + import { Injectable } from '@angular/core'; import { NavigationEnd, Router } from '@angular/router'; import { filter } from 'rxjs/operators'; @@ -13,8 +15,6 @@ import { AnalyticsIdConfig } from './../configurations'; import { Types } from './../utils/types'; import { ResourceLoaderService } from './resource-loader.service'; -// tslint:disable:only-arrow-functions - export const AnalyticsServiceFactory = (analyticsId: AnalyticsIdConfig, router: Router, resourceLoader: ResourceLoaderService) => { return new AnalyticsService(analyticsId, router, resourceLoader); }; diff --git a/frontend/app/framework/utils/array-extensions.ts b/frontend/app/framework/utils/array-extensions.ts index 7033e1d83..91d81aa70 100644 --- a/frontend/app/framework/utils/array-extensions.ts +++ b/frontend/app/framework/utils/array-extensions.ts @@ -1,4 +1,3 @@ - /* * Squidex Headless CMS * diff --git a/frontend/app/framework/utils/hateos.ts b/frontend/app/framework/utils/hateos.ts index 9bc67ac10..09578404f 100644 --- a/frontend/app/framework/utils/hateos.ts +++ b/frontend/app/framework/utils/hateos.ts @@ -1,4 +1,3 @@ - /* * Squidex Headless CMS * diff --git a/frontend/app/framework/utils/picasso.ts b/frontend/app/framework/utils/picasso.ts index 3bf9ecb7d..d3e444995 100644 --- a/frontend/app/framework/utils/picasso.ts +++ b/frontend/app/framework/utils/picasso.ts @@ -1,4 +1,11 @@ -import MersenneTwister from 'mersenne-twister'; +/* + * Squidex Headless CMS + * + * @license + * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. + */ + + import MersenneTwister from 'mersenne-twister'; const ALL_COLORS: ReadonlyArray = [ 'rgb(226,27,12)', diff --git a/frontend/app/framework/utils/types.spec.ts b/frontend/app/framework/utils/types.spec.ts index eeeef1153..fdd2edf34 100644 --- a/frontend/app/framework/utils/types.spec.ts +++ b/frontend/app/framework/utils/types.spec.ts @@ -5,16 +5,9 @@ * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. */ -import { mergeInto, Types } from './types'; +import { Types } from './types'; describe('Types', () => { - it('should calculate hash string', () => { - expect(Types.hash(null)).toBe('null'); - expect(Types.hash(undefined)).toBeUndefined(); - - expect(Types.hash(new RegExp('.*'))).toEqual('{}'); - }); - it('should make string check', () => { expect(Types.isString('')).toBeTruthy(); expect(Types.isString('string')).toBeTruthy(); @@ -103,12 +96,6 @@ describe('Types', () => { expect(Types.is(1, MyClass)).toBeFalsy(); }); - it('should make json equals check', () => { - expect(Types.jsJsonEquals({ a: 1, b: 2 }, { a: 1, b: 2 })).toBeTruthy(); - - expect(Types.jsJsonEquals({ a: 1, b: 2 }, { b: 2, a: 1 })).toBeFalsy(); - }); - it('should not treat zero as empty', () => { expect(Types.isEmpty(0)).toBeFalsy(); }); @@ -153,10 +140,83 @@ describe('Types', () => { expect(Types.isEmpty({ a: null, b: null })).toBeTruthy(); }); + it('should compare undefined', () => { + expect(Types.equals(undefined, undefined)).toBeTruthy(); + }); + + it('should compare null', () => { + expect(Types.equals(null, null)).toBeTruthy(); + }); + + it('should compare invalid', () => { + expect(Types.equals(null, undefined)).toBeFalsy(); + }); + + it('should compare scalars', () => { + expect(Types.equals(1, false)).toBeFalsy(); + expect(Types.equals(1, 2)).toBeFalsy(); + expect(Types.equals(2, 2)).toBeTruthy(); + }); + + it('should compare arrays', () => { + expect(Types.equals([1, 2], [2, 3])).toBeFalsy(); + expect(Types.equals([1, 2], [1, 2])).toBeTruthy(); + }); + + it('should compare objects', () => { + expect(Types.equals({ a: 1, b: 2 }, { a: 2, b: 3 })).toBeFalsy(); + expect(Types.equals({ a: 1, b: 2 }, { a: 1, b: 2 })).toBeTruthy(); + }); + + it('should compare nested objects', () => { + expect(Types.equals({ a: [1, 2] }, { a: [2, 3] })).toBeFalsy(); + expect(Types.equals({ a: [1, 2] }, { a: [1, 2] })).toBeTruthy(); + }); + + it('should clone array', () => { + const source = [1, 2, 3]; + const result = Types.clone(source); + + expect(result).toEqual(source); + expect(result).not.toBe(source); + }); + + it('should compare arrays', () => { + const source = 13; + const result = Types.clone(source); + + expect(result).toEqual(source); + }); + + it('should clone value', () => { + const source = 13; + const result = Types.clone(source); + + expect(result).toEqual(source); + }); + + it('should clone object', () => { + const source = { a: 1, b: 2 }; + const result = Types.clone(source); + + expect(result).toEqual(source); + expect(result).not.toBe(source); + }); + + it('should clone object of array', () => { + const source = { a: [1, 2], b: [3, 4] }; + const result = Types.clone(source); + + expect(result).toEqual(source); + expect(result).not.toBe(source); + expect(result.a).not.toBe(source.a); + expect(result.b).not.toBe(source.b); + }); + it('should merge deeply', () => { const source = {}; - mergeInto(source, { + Types.mergeInto(source, { rootShared: 1, rootA: 2, nested: { @@ -165,7 +225,7 @@ describe('Types', () => { array: [4] }); - mergeInto(source, { + Types.mergeInto(source, { rootShared: 5, rootB: 6, nested: { diff --git a/frontend/app/framework/utils/types.ts b/frontend/app/framework/utils/types.ts index 090514083..5c40b4e35 100644 --- a/frontend/app/framework/utils/types.ts +++ b/frontend/app/framework/utils/types.ts @@ -8,14 +8,6 @@ // tslint:disable: readonly-array export module Types { - export function hash(value: any): string { - try { - return JSON.stringify(value); - } catch (e) { - return ''; - } - } - export function isString(value: any): value is string { return typeof value === 'string' || value instanceof String; } @@ -82,28 +74,6 @@ export module Types { return true; } - export function jsJsonEquals(lhs: T, rhs: T) { - return hash(lhs) === hash(rhs); - } - - export function isEquals(lhs: ReadonlyArray, rhs: ReadonlyArray) { - if (!lhs && !rhs) { - return true; - } - - if (lhs.length !== rhs.length) { - return false; - } - - for (let i = 0; i < lhs.length; i++) { - if (rhs[i] !== lhs[i]) { - return false; - } - } - - return true; - } - export function isEmpty(value: any): boolean { if (Types.isArray(value)) { for (const v of value) { @@ -129,25 +99,91 @@ export module Types { return Types.isUndefined(value) === true || Types.isNull(value) === true; } -} -export function mergeInto(target: object, source: object) { - if (!Types.isObject(target) || !Types.isObject(source)) { - return source; + export function clone(lhs: T): T { + const any: any = lhs; + + if (Types.isArray(lhs)) { + const result = []; + + for (let i = 0; i < lhs.length; i++) { + result[i] = clone(lhs[i]); + } + + return result as any; + } else if (Types.isObject(lhs)) { + const result = {}; + + for (let key in any) { + if (any.hasOwnProperty(key)) { + result[key] = clone(lhs[key]); + } + } + + return result as any; + } + + return lhs; } - Object.keys(source).forEach(key => { - const targetValue = target[key]; - const sourceValue = source[key]; + export function equals(lhs: any, rhs: any) { + if (lhs === rhs || (lhs !== lhs && rhs !== rhs)) { + return true; + } + + if (!lhs || !rhs) { + return false; + } + + if (Types.isArray(lhs) && Types.isArray(rhs)) { + if (lhs.length !== rhs.length) { + return false; + } + + for (let i = 0; i < lhs.length; i++) { + if (!equals(lhs[i], rhs[i])) { + return false; + } + } + + return true; + } else if (Types.isObject(lhs) && Types.isObject(rhs)) { + if (Object.keys(lhs).length !== Object.keys(rhs).length) { + return false; + } - if (Types.isArray(targetValue) && Types.isArray(sourceValue)) { - target[key] = targetValue.concat(sourceValue); - } else if (Types.isObject(targetValue) && Types.isObject(sourceValue)) { - target[key] = mergeInto({ ...targetValue }, sourceValue); - } else { - target[key] = sourceValue; + for (let key in lhs) { + if (lhs.hasOwnProperty(key)) { + if (!equals(lhs[key], rhs[key])) { + return false; + } + } + } + + return true; + } + + return false; + } + + export function mergeInto(target: object, source: object) { + if (!Types.isObject(target) || !Types.isObject(source)) { + return source; } - }); - return target; + Object.keys(source).forEach(key => { + const targetValue = target[key]; + const sourceValue = source[key]; + + if (Types.isArray(targetValue) && Types.isArray(sourceValue)) { + target[key] = targetValue.concat(sourceValue); + } else if (Types.isObject(targetValue) && Types.isObject(sourceValue)) { + target[key] = mergeInto({ ...targetValue }, sourceValue); + } else { + target[key] = sourceValue; + } + }); + + return target; + } } \ No newline at end of file diff --git a/frontend/app/shared/components/app-form.component.scss b/frontend/app/shared/components/app-form.component.scss index fbb752506..e69de29bb 100644 --- a/frontend/app/shared/components/app-form.component.scss +++ b/frontend/app/shared/components/app-form.component.scss @@ -1,2 +0,0 @@ -@import '_vars'; -@import '_mixins'; \ No newline at end of file diff --git a/frontend/app/shared/components/asset-folder-form.component.scss b/frontend/app/shared/components/asset-folder-form.component.scss deleted file mode 100644 index fbb752506..000000000 --- a/frontend/app/shared/components/asset-folder-form.component.scss +++ /dev/null @@ -1,2 +0,0 @@ -@import '_vars'; -@import '_mixins'; \ No newline at end of file diff --git a/frontend/app/shared/components/asset-path.component.ts b/frontend/app/shared/components/asset-path.component.ts deleted file mode 100644 index 280b07889..000000000 --- a/frontend/app/shared/components/asset-path.component.ts +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Squidex Headless CMS - * - * @license - * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. - */ - -import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'; - -import { AssetPathItem } from '@app/shared/internal'; - -@Component({ - selector: 'sqx-asset-path', - template: ` - - Search Results - - - - - - - {{item.folderName}} - - - - `, - styles: [` - i { - vertical-align: middle; - }` - ], - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class AssetPathComponent { - @Output() - public navigate = new EventEmitter(); - - @Input() - public path: ReadonlyArray; - - public emitNavigate(item: AssetPathItem) { - this.navigate.emit(item); - } -} \ No newline at end of file diff --git a/frontend/app/shared/components/asset-dialog.component.html b/frontend/app/shared/components/assets/asset-dialog.component.html similarity index 100% rename from frontend/app/shared/components/asset-dialog.component.html rename to frontend/app/shared/components/assets/asset-dialog.component.html diff --git a/frontend/app/shared/components/asset-dialog.component.scss b/frontend/app/shared/components/assets/asset-dialog.component.scss similarity index 84% rename from frontend/app/shared/components/asset-dialog.component.scss rename to frontend/app/shared/components/assets/asset-dialog.component.scss index 845a0b88f..598de5f21 100644 --- a/frontend/app/shared/components/asset-dialog.component.scss +++ b/frontend/app/shared/components/assets/asset-dialog.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .form-group { position: relative; } diff --git a/frontend/app/shared/components/asset-dialog.component.ts b/frontend/app/shared/components/assets/asset-dialog.component.ts similarity index 100% rename from frontend/app/shared/components/asset-dialog.component.ts rename to frontend/app/shared/components/assets/asset-dialog.component.ts diff --git a/frontend/app/shared/components/asset-folder-form.component.html b/frontend/app/shared/components/assets/asset-folder-form.component.html similarity index 100% rename from frontend/app/shared/components/asset-folder-form.component.html rename to frontend/app/shared/components/assets/asset-folder-form.component.html diff --git a/frontend/app/shared/components/assets/asset-folder-form.component.scss b/frontend/app/shared/components/assets/asset-folder-form.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/shared/components/asset-folder-form.component.ts b/frontend/app/shared/components/assets/asset-folder-form.component.ts similarity index 100% rename from frontend/app/shared/components/asset-folder-form.component.ts rename to frontend/app/shared/components/assets/asset-folder-form.component.ts diff --git a/frontend/app/shared/components/asset-folder.component.html b/frontend/app/shared/components/assets/asset-folder.component.html similarity index 96% rename from frontend/app/shared/components/asset-folder.component.html rename to frontend/app/shared/components/assets/asset-folder.component.html index b57b65cdc..d83490fc5 100644 --- a/frontend/app/shared/components/asset-folder.component.html +++ b/frontend/app/shared/components/assets/asset-folder.component.html @@ -25,7 +25,7 @@ Delete diff --git a/frontend/app/shared/components/asset-folder.component.scss b/frontend/app/shared/components/assets/asset-folder.component.scss similarity index 93% rename from frontend/app/shared/components/asset-folder.component.scss rename to frontend/app/shared/components/assets/asset-folder.component.scss index 3de377410..dfff89a63 100644 --- a/frontend/app/shared/components/asset-folder.component.scss +++ b/frontend/app/shared/components/assets/asset-folder.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - :host /deep/ { .cdk-drag-placeholder { display: none; diff --git a/frontend/app/shared/components/asset-folder.component.ts b/frontend/app/shared/components/assets/asset-folder.component.ts similarity index 94% rename from frontend/app/shared/components/asset-folder.component.ts rename to frontend/app/shared/components/assets/asset-folder.component.ts index 240dcd4aa..f6c53afeb 100644 --- a/frontend/app/shared/components/asset-folder.component.ts +++ b/frontend/app/shared/components/assets/asset-folder.component.ts @@ -56,8 +56,4 @@ export class AssetFolderComponent { public emitNavigate() { this.navigate.emit(this.assetFolder); } - - public emitDelete() { - this.delete.emit(this.assetFolder); - } } \ No newline at end of file diff --git a/frontend/app/shared/components/assets/asset-path.component.html b/frontend/app/shared/components/assets/asset-path.component.html new file mode 100644 index 000000000..864331291 --- /dev/null +++ b/frontend/app/shared/components/assets/asset-path.component.html @@ -0,0 +1,12 @@ + + Search Results + + + + + + + {{item.folderName}} + + + \ No newline at end of file diff --git a/frontend/app/shared/components/assets/asset-path.component.scss b/frontend/app/shared/components/assets/asset-path.component.scss new file mode 100644 index 000000000..2ef6a98f9 --- /dev/null +++ b/frontend/app/shared/components/assets/asset-path.component.scss @@ -0,0 +1,3 @@ +i { + vertical-align: middle; +} \ No newline at end of file diff --git a/frontend/app/shared/components/assets/asset-path.component.ts b/frontend/app/shared/components/assets/asset-path.component.ts new file mode 100644 index 000000000..fbba57145 --- /dev/null +++ b/frontend/app/shared/components/assets/asset-path.component.ts @@ -0,0 +1,24 @@ +/* + * Squidex Headless CMS + * + * @license + * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. + */ + +import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'; + +import { AssetPathItem } from '@app/shared/internal'; + +@Component({ + selector: 'sqx-asset-path', + styleUrls: ['./asset-path.component.scss'], + templateUrl: './asset-path.component.html', + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class AssetPathComponent { + @Output() + public navigate = new EventEmitter(); + + @Input() + public path: ReadonlyArray; +} \ No newline at end of file diff --git a/frontend/app/shared/components/asset-uploader.component.html b/frontend/app/shared/components/assets/asset-uploader.component.html similarity index 100% rename from frontend/app/shared/components/asset-uploader.component.html rename to frontend/app/shared/components/assets/asset-uploader.component.html diff --git a/frontend/app/shared/components/asset-uploader.component.scss b/frontend/app/shared/components/assets/asset-uploader.component.scss similarity index 97% rename from frontend/app/shared/components/asset-uploader.component.scss rename to frontend/app/shared/components/assets/asset-uploader.component.scss index 5dea7b1e5..f25e8d02d 100644 --- a/frontend/app/shared/components/asset-uploader.component.scss +++ b/frontend/app/shared/components/assets/asset-uploader.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .icon-upload-3 { font-size: 1.4rem; font-weight: lighter; diff --git a/frontend/app/shared/components/asset-uploader.component.ts b/frontend/app/shared/components/assets/asset-uploader.component.ts similarity index 95% rename from frontend/app/shared/components/asset-uploader.component.ts rename to frontend/app/shared/components/assets/asset-uploader.component.ts index 4bd64fe44..a391f59ec 100644 --- a/frontend/app/shared/components/asset-uploader.component.ts +++ b/frontend/app/shared/components/assets/asset-uploader.component.ts @@ -15,7 +15,7 @@ import { Upload } from '@app/shared/internal'; -import { AppsState } from './../state/apps.state'; +import { AppsState } from '@app/shared/internal'; @Component({ selector: 'sqx-asset-uploader', diff --git a/frontend/app/shared/components/asset.component.html b/frontend/app/shared/components/assets/asset.component.html similarity index 94% rename from frontend/app/shared/components/asset.component.html rename to frontend/app/shared/components/assets/asset.component.html index 13188bff4..bcdd6cf2f 100644 --- a/frontend/app/shared/components/asset.component.html +++ b/frontend/app/shared/components/assets/asset.component.html @@ -1,5 +1,5 @@ -
@@ -31,12 +31,12 @@ - +
@@ -84,7 +84,7 @@
-
@@ -126,12 +126,12 @@ - diff --git a/frontend/app/shared/components/asset.component.scss b/frontend/app/shared/components/assets/asset.component.scss similarity index 99% rename from frontend/app/shared/components/asset.component.scss rename to frontend/app/shared/components/assets/asset.component.scss index 3c8972d14..d6f664f43 100644 --- a/frontend/app/shared/components/asset.component.scss +++ b/frontend/app/shared/components/assets/asset.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - // sass-lint:disable single-line-per-selector $list-height: 2.25rem; diff --git a/frontend/app/shared/components/asset.component.ts b/frontend/app/shared/components/assets/asset.component.ts similarity index 94% rename from frontend/app/shared/components/asset.component.ts rename to frontend/app/shared/components/assets/asset.component.ts index c2fc2cdf1..6e17c0f9a 100644 --- a/frontend/app/shared/components/asset.component.ts +++ b/frontend/app/shared/components/assets/asset.component.ts @@ -134,14 +134,6 @@ export class AssetComponent implements OnInit { } } - public emitSelect() { - this.select.emit(this.asset); - } - - public emitDelete() { - this.delete.emit(this.asset); - } - public emitLoad(asset: AssetDto) { this.load.emit(asset); } @@ -150,10 +142,6 @@ export class AssetComponent implements OnInit { this.loadError.emit(error); } - public emitRemove() { - this.remove.emit(); - } - private setProgress(progress: number) { this.progress = progress; diff --git a/frontend/app/shared/components/assets-list.component.html b/frontend/app/shared/components/assets/assets-list.component.html similarity index 98% rename from frontend/app/shared/components/assets-list.component.html rename to frontend/app/shared/components/assets/assets-list.component.html index f4576152b..bfbc16352 100644 --- a/frontend/app/shared/components/assets-list.component.html +++ b/frontend/app/shared/components/assets/assets-list.component.html @@ -80,7 +80,7 @@ [isSelectable]="!!selectedIds" [isSelected]="isSelected(asset)" [allTags]="tags" - (select)="emitSelect(asset)" + (select)="select.emit(asset)" (delete)="deleteAsset(asset)">
diff --git a/frontend/app/shared/components/assets-list.component.scss b/frontend/app/shared/components/assets/assets-list.component.scss similarity index 97% rename from frontend/app/shared/components/assets-list.component.scss rename to frontend/app/shared/components/assets/assets-list.component.scss index 90ab88f68..19e12c089 100644 --- a/frontend/app/shared/components/assets-list.component.scss +++ b/frontend/app/shared/components/assets/assets-list.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .unrow { display: block; } diff --git a/frontend/app/shared/components/assets-list.component.ts b/frontend/app/shared/components/assets/assets-list.component.ts similarity index 97% rename from frontend/app/shared/components/assets-list.component.ts rename to frontend/app/shared/components/assets/assets-list.component.ts index ec4d3bff0..ff6432500 100644 --- a/frontend/app/shared/components/assets-list.component.ts +++ b/frontend/app/shared/components/assets/assets-list.component.ts @@ -85,10 +85,6 @@ export class AssetsListComponent { this.state.deleteAssetFolder(assetFolder); } - public emitSelect(asset: AssetDto) { - this.select.emit(asset); - } - public isSelected(asset: AssetDto) { return this.selectedIds && this.selectedIds[asset.id]; } diff --git a/frontend/app/shared/components/assets-selector.component.html b/frontend/app/shared/components/assets/assets-selector.component.html similarity index 100% rename from frontend/app/shared/components/assets-selector.component.html rename to frontend/app/shared/components/assets/assets-selector.component.html diff --git a/frontend/app/shared/components/assets-selector.component.scss b/frontend/app/shared/components/assets/assets-selector.component.scss similarity index 92% rename from frontend/app/shared/components/assets-selector.component.scss rename to frontend/app/shared/components/assets/assets-selector.component.scss index 1a6127d3a..e13db9d58 100644 --- a/frontend/app/shared/components/assets-selector.component.scss +++ b/frontend/app/shared/components/assets/assets-selector.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - :host ::ng-deep { .search { .form-control { diff --git a/frontend/app/shared/components/assets-selector.component.ts b/frontend/app/shared/components/assets/assets-selector.component.ts similarity index 100% rename from frontend/app/shared/components/assets-selector.component.ts rename to frontend/app/shared/components/assets/assets-selector.component.ts diff --git a/frontend/app/shared/components/assets/pipes.ts b/frontend/app/shared/components/assets/pipes.ts new file mode 100644 index 000000000..154046a96 --- /dev/null +++ b/frontend/app/shared/components/assets/pipes.ts @@ -0,0 +1,75 @@ +/* + * Squidex Headless CMS + * + * @license + * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. + */ + +import { Pipe, PipeTransform } from '@angular/core'; + +import { + ApiUrlConfig, + AssetDto, + MathHelper +} from '@app/shared/internal'; + +@Pipe({ + name: 'sqxAssetUrl', + pure: true +}) +export class AssetUrlPipe implements PipeTransform { + constructor( + private readonly apiUrl: ApiUrlConfig + ) { + } + + public transform(asset: AssetDto): string { + return `${asset.fullUrl(this.apiUrl)}&sq=${MathHelper.guid()}`; + } +} + +@Pipe({ + name: 'sqxAssetPreviewUrl', + pure: true +}) +export class AssetPreviewUrlPipe implements PipeTransform { + constructor( + private readonly apiUrl: ApiUrlConfig + ) { + } + + public transform(asset: AssetDto): string { + return asset.fullUrl(this.apiUrl); + } +} + +@Pipe({ + name: 'sqxFileIcon', + pure: true +}) +export class FileIconPipe implements PipeTransform { + public transform(asset: { mimeType: string, fileType: string }): string { + const knownTypes = [ + 'doc', + 'docx', + 'pdf', + 'ppt', + 'pptx', + 'video', + 'xls', + 'xlsx' + ]; + + let mimeIcon: string; + + const mimeParts = asset.mimeType.split('/'); + + if (mimeParts.length === 2 && mimeParts[0].toLowerCase() === 'video') { + mimeIcon = 'video'; + } else { + mimeIcon = knownTypes.indexOf(asset.fileType) >= 0 ? asset.fileType : 'generic'; + } + + return `./images/asset_${mimeIcon}.svg`; + } +} \ No newline at end of file diff --git a/frontend/app/shared/components/comment.component.html b/frontend/app/shared/components/comments/comment.component.html similarity index 95% rename from frontend/app/shared/components/comment.component.html rename to frontend/app/shared/components/comments/comment.component.html index 09abf1940..15415a663 100644 --- a/frontend/app/shared/components/comment.component.html +++ b/frontend/app/shared/components/comments/comment.component.html @@ -21,7 +21,7 @@
-
diff --git a/frontend/app/shared/components/queries/filter-comparison.component.scss b/frontend/app/shared/components/search/queries/filter-comparison.component.scss similarity index 60% rename from frontend/app/shared/components/queries/filter-comparison.component.scss rename to frontend/app/shared/components/search/queries/filter-comparison.component.scss index fe19e6460..16d712984 100644 --- a/frontend/app/shared/components/queries/filter-comparison.component.scss +++ b/frontend/app/shared/components/search/queries/filter-comparison.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .path { width: 10rem; } diff --git a/frontend/app/shared/components/queries/filter-comparison.component.ts b/frontend/app/shared/components/search/queries/filter-comparison.component.ts similarity index 97% rename from frontend/app/shared/components/queries/filter-comparison.component.ts rename to frontend/app/shared/components/search/queries/filter-comparison.component.ts index acba843f1..13227c73e 100644 --- a/frontend/app/shared/components/queries/filter-comparison.component.ts +++ b/frontend/app/shared/components/search/queries/filter-comparison.component.ts @@ -100,10 +100,6 @@ export class FilterComparisonComponent implements OnChanges { this.fieldModel = newModel; } - public emitRemove() { - this.remove.emit(); - } - public emitChange() { this.change.emit(); } diff --git a/frontend/app/shared/components/queries/filter-logical.component.html b/frontend/app/shared/components/search/queries/filter-logical.component.html similarity index 98% rename from frontend/app/shared/components/queries/filter-logical.component.html rename to frontend/app/shared/components/search/queries/filter-logical.component.html index 4ab99e218..73f5b4dc7 100644 --- a/frontend/app/shared/components/queries/filter-logical.component.html +++ b/frontend/app/shared/components/search/queries/filter-logical.component.html @@ -13,7 +13,7 @@
-
diff --git a/frontend/app/shared/components/queries/filter-logical.component.scss b/frontend/app/shared/components/search/queries/filter-logical.component.scss similarity index 93% rename from frontend/app/shared/components/queries/filter-logical.component.scss rename to frontend/app/shared/components/search/queries/filter-logical.component.scss index fa3b05e02..ba1c798e6 100644 --- a/frontend/app/shared/components/queries/filter-logical.component.scss +++ b/frontend/app/shared/components/search/queries/filter-logical.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - $field-line: #e1e8ef; .filters { diff --git a/frontend/app/shared/components/queries/filter-logical.component.ts b/frontend/app/shared/components/search/queries/filter-logical.component.ts similarity index 97% rename from frontend/app/shared/components/queries/filter-logical.component.ts rename to frontend/app/shared/components/search/queries/filter-logical.component.ts index 768c12576..bf4b5ad4a 100644 --- a/frontend/app/shared/components/queries/filter-logical.component.ts +++ b/frontend/app/shared/components/search/queries/filter-logical.component.ts @@ -108,10 +108,6 @@ export class FilterLogicalComponent { } } - public emitRemove() { - this.remove.emit(); - } - public emitChange() { this.change.emit(); } diff --git a/frontend/app/shared/components/search/queries/filter-node.component.html b/frontend/app/shared/components/search/queries/filter-node.component.html new file mode 100644 index 000000000..78a3332be --- /dev/null +++ b/frontend/app/shared/components/search/queries/filter-node.component.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/frontend/app/shared/components/search/queries/filter-node.component.scss b/frontend/app/shared/components/search/queries/filter-node.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/shared/components/queries/filter-node.component.ts b/frontend/app/shared/components/search/queries/filter-node.component.ts similarity index 65% rename from frontend/app/shared/components/queries/filter-node.component.ts rename to frontend/app/shared/components/search/queries/filter-node.component.ts index 53dd147b2..6d71635a3 100644 --- a/frontend/app/shared/components/queries/filter-node.component.ts +++ b/frontend/app/shared/components/search/queries/filter-node.component.ts @@ -17,19 +17,8 @@ import { @Component({ selector: 'sqx-filter-node', - template: ` - - - - - - - - - - `, + styleUrls: ['./filter-node.component.scss'], + templateUrl: './filter-node.component.html', changeDetection: ChangeDetectionStrategy.OnPush }) export class FilterNodeComponent { diff --git a/frontend/app/shared/components/search/queries/query-path.component.html b/frontend/app/shared/components/search/queries/query-path.component.html new file mode 100644 index 000000000..34b9c33fc --- /dev/null +++ b/frontend/app/shared/components/search/queries/query-path.component.html @@ -0,0 +1,16 @@ + + +
+
+
{{model.fields[field].displayName}}
+
+
+ {{model.fields[field].description}} +
+
+
+ + + {{model.fields[field].displayName}} + +
\ No newline at end of file diff --git a/frontend/app/shared/components/search/queries/query-path.component.scss b/frontend/app/shared/components/search/queries/query-path.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/shared/components/search/queries/query-path.component.ts b/frontend/app/shared/components/search/queries/query-path.component.ts new file mode 100644 index 000000000..90faf1138 --- /dev/null +++ b/frontend/app/shared/components/search/queries/query-path.component.ts @@ -0,0 +1,27 @@ +/* + * Squidex Headless CMS + * + * @license + * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. + */ + +import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'; + +import { QueryModel } from '@app/shared/internal'; + +@Component({ + selector: 'sqx-query-path', + styleUrls: ['./query-path.component.scss'], + templateUrl: './query-path.component.html', + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class QueryPathComponent { + @Output() + public pathChange = new EventEmitter(); + + @Input() + public path: string; + + @Input() + public model: QueryModel; +} \ No newline at end of file diff --git a/frontend/app/shared/components/search/queries/query.component.html b/frontend/app/shared/components/search/queries/query.component.html new file mode 100644 index 000000000..63f85d7fd --- /dev/null +++ b/frontend/app/shared/components/search/queries/query.component.html @@ -0,0 +1,15 @@ + + + +

Sorting

+ +
+ + +
+ + \ No newline at end of file diff --git a/frontend/app/shared/components/search/queries/query.component.scss b/frontend/app/shared/components/search/queries/query.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/shared/components/queries/query.component.ts b/frontend/app/shared/components/search/queries/query.component.ts similarity index 50% rename from frontend/app/shared/components/queries/query.component.ts rename to frontend/app/shared/components/search/queries/query.component.ts index 6eace549b..7f3e7ad4b 100644 --- a/frontend/app/shared/components/queries/query.component.ts +++ b/frontend/app/shared/components/search/queries/query.component.ts @@ -11,28 +11,14 @@ import { LanguageDto, Query, QueryModel, - QuerySorting + QuerySorting, + Types } from '@app/shared/internal'; @Component({ selector: 'sqx-query', - template: ` - - - -

Sorting

- -
- - -
- - - `, + styleUrls: ['./query.component.scss'], + templateUrl: './query.component.html', changeDetection: ChangeDetectionStrategy.OnPush }) export class QueryComponent { @@ -47,30 +33,10 @@ export class QueryComponent { @Input() public set query(query: Query) { - if (!query) { - query = {}; - } - - if (query) { - if (!query.filter) { - query.filter = { - and: [] - }; - } - - if (!query.sort) { - query.sort = []; - } - - this.queryValue = query; - } + this.queryValue = Types.clone(query); } - public queryValue: Query; - - constructor() { - this.query = {}; - } + public queryValue: Query = {}; public addSorting() { this.queryValue.sort!.push({ path: Object.keys(this.model.fields)[0], order: 'ascending' }); diff --git a/frontend/app/shared/components/search/queries/sorting.component.html b/frontend/app/shared/components/search/queries/sorting.component.html new file mode 100644 index 000000000..3d7d62b6a --- /dev/null +++ b/frontend/app/shared/components/search/queries/sorting.component.html @@ -0,0 +1,21 @@ +
+
+
+ + + + +
+
+
+ +
+
\ No newline at end of file diff --git a/frontend/app/shared/components/search/queries/sorting.component.scss b/frontend/app/shared/components/search/queries/sorting.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/shared/components/queries/sorting.component.ts b/frontend/app/shared/components/search/queries/sorting.component.ts similarity index 50% rename from frontend/app/shared/components/queries/sorting.component.ts rename to frontend/app/shared/components/search/queries/sorting.component.ts index ccb337fc5..21ff5b97d 100644 --- a/frontend/app/shared/components/queries/sorting.component.ts +++ b/frontend/app/shared/components/search/queries/sorting.component.ts @@ -11,29 +11,8 @@ import { QueryModel, QuerySorting } from '@app/shared/internal'; @Component({ selector: 'sqx-sorting', - template: ` -
-
-
- - - - -
-
-
- -
-
- `, + styleUrls: ['./sorting.component.scss'], + templateUrl: './sorting.component.html', changeDetection: ChangeDetectionStrategy.OnPush }) export class SortingComponent { diff --git a/frontend/app/shared/components/search/query-list.component.html b/frontend/app/shared/components/search/query-list.component.html new file mode 100644 index 000000000..1f86f38d4 --- /dev/null +++ b/frontend/app/shared/components/search/query-list.component.html @@ -0,0 +1,17 @@ + + + + {{saved.name}} + + + + + + + + + + \ No newline at end of file diff --git a/frontend/app/shared/components/search/query-list.component.scss b/frontend/app/shared/components/search/query-list.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/shared/components/search/query-list.component.ts b/frontend/app/shared/components/search/query-list.component.ts new file mode 100644 index 000000000..1244d585e --- /dev/null +++ b/frontend/app/shared/components/search/query-list.component.ts @@ -0,0 +1,48 @@ +/* + * Squidex Headless CMS + * + * @license + * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. + */ + +import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'; + +import { + equalsQuery, + Query, + SavedQuery +} from '@app/shared/internal'; + +@Component({ + selector: 'sqx-query-list', + styleUrls: ['./query-list.component.scss'], + templateUrl: './query-list.component.html', + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class QueryListComponent { + @Output() + public search = new EventEmitter(); + + @Output() + public remove = new EventEmitter(); + + @Input() + public queryUsed: Query | undefined; + + @Input() + public queries: ReadonlyArray; + + @Input() + public canRemove: boolean; + + @Input() + public types: string; + + public isSelectedQuery(saved: SavedQuery) { + return equalsQuery(saved.query, this.queryUsed); + } + + public trackByQuery(index: number, query: SavedQuery) { + return query.name; + } +} \ No newline at end of file diff --git a/frontend/app/shared/components/search-form.component.html b/frontend/app/shared/components/search/search-form.component.html similarity index 100% rename from frontend/app/shared/components/search-form.component.html rename to frontend/app/shared/components/search/search-form.component.html diff --git a/frontend/app/shared/components/search-form.component.scss b/frontend/app/shared/components/search/search-form.component.scss similarity index 95% rename from frontend/app/shared/components/search-form.component.scss rename to frontend/app/shared/components/search/search-form.component.scss index a0c532932..e6f35bf63 100644 --- a/frontend/app/shared/components/search-form.component.scss +++ b/frontend/app/shared/components/search/search-form.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .search-form { display: inline-block; } diff --git a/frontend/app/shared/components/search-form.component.ts b/frontend/app/shared/components/search/search-form.component.ts similarity index 100% rename from frontend/app/shared/components/search-form.component.ts rename to frontend/app/shared/components/search/search-form.component.ts diff --git a/frontend/app/shared/components/search/shared-queries.component.html b/frontend/app/shared/components/search/shared-queries.component.html new file mode 100644 index 000000000..a21679dec --- /dev/null +++ b/frontend/app/shared/components/search/shared-queries.component.html @@ -0,0 +1,25 @@ + + +
+ + \ No newline at end of file diff --git a/frontend/app/shared/components/search/shared-queries.component.scss b/frontend/app/shared/components/search/shared-queries.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/shared/components/search/shared-queries.component.ts b/frontend/app/shared/components/search/shared-queries.component.ts new file mode 100644 index 000000000..83d1e4c0f --- /dev/null +++ b/frontend/app/shared/components/search/shared-queries.component.ts @@ -0,0 +1,30 @@ +/* + * Squidex Headless CMS + * + * @license + * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. + */ + +import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'; + +import { Queries, Query } from '@app/shared/internal'; + +@Component({ + selector: 'sqx-shared-queries', + styleUrls: ['./shared-queries.component.scss'], + templateUrl: './shared-queries.component.html', + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class SavedQueriesComponent { + @Output() + public search = new EventEmitter(); + + @Input() + public queryUsed: Query; + + @Input() + public queries: Queries; + + @Input() + public types: string; +} \ No newline at end of file diff --git a/frontend/app/shared/components/table-header.component.html b/frontend/app/shared/components/table-header.component.html new file mode 100644 index 000000000..a2ce0143e --- /dev/null +++ b/frontend/app/shared/components/table-header.component.html @@ -0,0 +1,12 @@ + + + + + + {{text}} + + + + + {{text}} + \ No newline at end of file diff --git a/frontend/app/shared/components/table-header.component.scss b/frontend/app/shared/components/table-header.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/shared/components/table-header.component.ts b/frontend/app/shared/components/table-header.component.ts index aa5045ef8..1beb901ac 100644 --- a/frontend/app/shared/components/table-header.component.ts +++ b/frontend/app/shared/components/table-header.component.ts @@ -10,25 +10,14 @@ import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, Out import { LanguageDto, Query, - SortMode + SortMode, + Types } from '@app/shared/internal'; @Component({ selector: 'sqx-table-header', - template: ` - - - - - - {{text}} - - - - - {{text}} - - `, + styleUrls: ['./table-header.component.scss'], + templateUrl: './table-header.component.html', changeDetection: ChangeDetectionStrategy.OnPush }) export class TableHeaderComponent implements OnChanges { @@ -76,11 +65,13 @@ export class TableHeaderComponent implements OnChanges { this.order = 'descending'; } - this.queryChange.emit(this.newQuery()); - } - } + const newQuery = Types.clone(this.query); + + newQuery.sort = [ + { path: this.fieldPath, order: this.order! } + ]; - private newQuery() { - return {...this.query, sort: [{ path: this.fieldPath, order: this.order! }] }; + this.queryChange.emit(newQuery); + } } } \ No newline at end of file diff --git a/frontend/app/shared/declarations.ts b/frontend/app/shared/declarations.ts index 9a3b9cbcf..33f7ff0df 100644 --- a/frontend/app/shared/declarations.ts +++ b/frontend/app/shared/declarations.ts @@ -6,38 +6,46 @@ */ export * from './components/app-form.component'; -export * from './components/asset-dialog.component'; -export * from './components/asset-folder.component'; -export * from './components/asset-folder-form.component'; -export * from './components/asset-path.component'; -export * from './components/asset-uploader.component'; -export * from './components/asset.component'; -export * from './components/assets-list.component'; -export * from './components/assets-selector.component'; -export * from './components/comment.component'; -export * from './components/comments.component'; -export * from './components/geolocation-editor.component'; -export * from './components/help-markdown.pipe'; -export * from './components/help.component'; -export * from './components/history-list.component'; -export * from './components/history.component'; -export * from './components/language-selector.component'; -export * from './components/markdown-editor.component'; export * from './components/pipes'; -export * from './components/references-dropdown.component'; -export * from './components/references-tags.component'; -export * from './components/rich-editor.component'; -export * from './components/saved-queries.component'; export * from './components/schema-category.component'; -export * from './components/search-form.component'; export * from './components/table-header.component'; -export * from './components/queries/filter-comparison.component'; -export * from './components/queries/filter-logical.component'; -export * from './components/queries/filter-node.component'; -export * from './components/queries/query-path.component'; -export * from './components/queries/query.component'; -export * from './components/queries/sorting.component'; +export * from './components/assets/asset-dialog.component'; +export * from './components/assets/asset-folder-form.component'; +export * from './components/assets/asset-folder.component'; +export * from './components/assets/asset-path.component'; +export * from './components/assets/asset-uploader.component'; +export * from './components/assets/asset.component'; +export * from './components/assets/assets-list.component'; +export * from './components/assets/assets-selector.component'; +export * from './components/assets/pipes'; + +export * from './components/comments/comment.component'; +export * from './components/comments/comments.component'; + +export * from './components/forms/geolocation-editor.component'; +export * from './components/forms/language-selector.component'; +export * from './components/forms/markdown-editor.component'; +export * from './components/forms/references-dropdown.component'; +export * from './components/forms/references-tags.component'; +export * from './components/forms/rich-editor.component'; + +export * from './components/help/help-markdown.pipe'; +export * from './components/help/help.component'; + +export * from './components/history/history-list.component'; +export * from './components/history/history.component'; +export * from './components/history/pipes'; + +export * from './components/search/queries/filter-comparison.component'; +export * from './components/search/queries/filter-logical.component'; +export * from './components/search/queries/filter-node.component'; +export * from './components/search/queries/query-path.component'; +export * from './components/search/queries/query.component'; +export * from './components/search/queries/sorting.component'; +export * from './components/search/query-list.component'; +export * from './components/search/search-form.component'; +export * from './components/search/shared-queries.component'; export * from './guards/app-must-exist.guard'; export * from './guards/content-must-exist.guard'; diff --git a/frontend/app/shared/module.ts b/frontend/app/shared/module.ts index d205c5a73..6bcb0ff7b 100644 --- a/frontend/app/shared/module.ts +++ b/frontend/app/shared/module.ts @@ -75,6 +75,7 @@ import { PlansService, PlansState, QueryComponent, + QueryListComponent, QueryPathComponent, ReferencesDropdownComponent, ReferencesTagsComponent, @@ -148,6 +149,7 @@ import { LanguageSelectorComponent, MarkdownEditorComponent, QueryComponent, + QueryListComponent, QueryPathComponent, ReferencesDropdownComponent, ReferencesTagsComponent, @@ -188,6 +190,7 @@ import { HistoryMessagePipe, LanguageSelectorComponent, MarkdownEditorComponent, + QueryListComponent, ReferencesDropdownComponent, ReferencesTagsComponent, RichEditorComponent, diff --git a/frontend/app/shared/services/assets.service.spec.ts b/frontend/app/shared/services/assets.service.spec.ts index 9220633c9..bfd8af614 100644 --- a/frontend/app/shared/services/assets.service.spec.ts +++ b/frontend/app/shared/services/assets.service.spec.ts @@ -17,6 +17,7 @@ import { AssetsDto, AssetsService, DateTime, + encodeQuery, ErrorDto, MathHelper, Resource, @@ -24,8 +25,6 @@ import { Version } from '@app/shared/internal'; -import { encodeQuery } from '../state/query'; - describe('AssetsService', () => { const version = new Version('1'); @@ -80,7 +79,9 @@ describe('AssetsService', () => { assets = result; }); - const req = httpMock.expectOne(`http://service/p/api/apps/my-app/assets?q=${encodeQuery({ take: 17, skip: 13 })}`); + const query = { take: 17, skip: 13 }; + + const req = httpMock.expectOne(`http://service/p/api/apps/my-app/assets?q=${encodeQuery(query)}`); expect(req.request.method).toEqual('GET'); expect(req.request.headers.get('If-Match')).toBeNull(); @@ -157,7 +158,9 @@ describe('AssetsService', () => { assetsService.getAssets('my-app', 17, 13, { fullText: 'my-query' }).subscribe(); - const req = httpMock.expectOne(`http://service/p/api/apps/my-app/assets?q=${encodeQuery({ filter: { and: [{ path: 'fileName', op: 'contains', value: 'my-query' }] }, take: 17, skip: 13 })}`); + const query = { filter: { and: [{ path: 'fileName', op: 'contains', value: 'my-query' }] }, take: 17, skip: 13 }; + + const req = httpMock.expectOne(`http://service/p/api/apps/my-app/assets?q=${encodeQuery(query)}`); expect(req.request.method).toEqual('GET'); expect(req.request.headers.get('If-Match')).toBeNull(); @@ -170,7 +173,9 @@ describe('AssetsService', () => { assetsService.getAssets('my-app', 17, 13, undefined, ['tag1']).subscribe(); - const req = httpMock.expectOne(`http://service/p/api/apps/my-app/assets?q=${encodeQuery({ filter: { and: [{ path: 'tags', op: 'eq', value: 'tag1' }] }, take: 17, skip: 13 })}`); + const query = { filter: { and: [{ path: 'tags', op: 'eq', value: 'tag1' }] }, take: 17, skip: 13 }; + + const req = httpMock.expectOne(`http://service/p/api/apps/my-app/assets?q=${encodeQuery(query)}`); expect(req.request.method).toEqual('GET'); expect(req.request.headers.get('If-Match')).toBeNull(); diff --git a/frontend/app/shared/services/contents.service.spec.ts b/frontend/app/shared/services/contents.service.spec.ts index 27a57724b..d52702a55 100644 --- a/frontend/app/shared/services/contents.service.spec.ts +++ b/frontend/app/shared/services/contents.service.spec.ts @@ -21,7 +21,7 @@ import { Version, Versioned } from '@app/shared/internal'; -import { encodeQuery } from '../state/query'; +import { encodeQuery } from './../state/query'; describe('ContentsService', () => { const version = new Version('1'); diff --git a/frontend/app/shared/services/workflows.service.spec.ts b/frontend/app/shared/services/workflows.service.spec.ts index 46dbfc5e7..5b5a72148 100644 --- a/frontend/app/shared/services/workflows.service.spec.ts +++ b/frontend/app/shared/services/workflows.service.spec.ts @@ -20,7 +20,6 @@ import { } from '@app/shared/internal'; describe('WorkflowsService', () => { - const version = new Version('1'); beforeEach(() => { diff --git a/frontend/app/shared/state/apps.state.spec.ts b/frontend/app/shared/state/apps.state.spec.ts index b85b7a1ae..5c115e1a2 100644 --- a/frontend/app/shared/state/apps.state.spec.ts +++ b/frontend/app/shared/state/apps.state.spec.ts @@ -15,7 +15,7 @@ import { DialogService } from '@app/shared/internal'; -import { createApp } from '../services/apps.service.spec'; +import { createApp } from './../services/apps.service.spec'; describe('AppsState', () => { const app1 = createApp(1); diff --git a/frontend/app/shared/state/apps.state.ts b/frontend/app/shared/state/apps.state.ts index dbc60840e..830ac8bdc 100644 --- a/frontend/app/shared/state/apps.state.ts +++ b/frontend/app/shared/state/apps.state.ts @@ -162,7 +162,8 @@ export class AppsState extends State { this.next(s => { const apps = s.apps.replaceBy('id', updated); - const selectedApp = s.selectedApp && + const selectedApp = + s.selectedApp && s.selectedApp.id === app.id ? updated : s.selectedApp; diff --git a/frontend/app/shared/state/assets.forms.ts b/frontend/app/shared/state/assets.forms.ts index 81fb64861..90049637e 100644 --- a/frontend/app/shared/state/assets.forms.ts +++ b/frontend/app/shared/state/assets.forms.ts @@ -115,11 +115,11 @@ export class AnnotateAssetForm extends Form { const { @@ -106,7 +105,7 @@ describe('AssetsState', () => { assetsState.toggleTag('tag1').subscribe(); assetsState.toggleTag('tag1').subscribe(); - expect(assetsState.isTagSelected('tag1')).toBeFalsy(); + expect(assetsState.snapshot.tagsSelected).toEqual({}); }); it('should load without tags when tags reset', () => { @@ -115,7 +114,7 @@ describe('AssetsState', () => { assetsState.resetTags().subscribe(); - expect(assetsState.isTagSelectionEmpty()).toBeTruthy(); + expect(assetsState.snapshot.tagsSelected).toEqual({}); }); it('should load with new pagination when paging', () => { @@ -189,7 +188,7 @@ describe('AssetsState', () => { assetsState.toggleTag('tag1').subscribe(); - expect(assetsState.isTagSelected('tag1')).toBeTruthy(); + expect(assetsState.snapshot.tagsSelected).toEqual({ tag1: true }); }); it('should load with tags when tags selected', () => { @@ -198,7 +197,7 @@ describe('AssetsState', () => { assetsState.selectTags(['tag1', 'tag2']).subscribe(); - expect(assetsState.isTagSelected('tag1')).toBeTruthy(); + expect(assetsState.snapshot.tagsSelected).toEqual({ tag1: true, tag2: true }); }); it('should load with query when searching', () => { @@ -210,7 +209,6 @@ describe('AssetsState', () => { assetsState.search(query).subscribe(); expect(assetsState.snapshot.assetsQuery).toEqual(query); - expect(assetsState.isQueryUsed({ name: 'name', query, queryJson: encodeQuery(query) })).toBeTruthy(); }); }); diff --git a/frontend/app/shared/state/assets.state.ts b/frontend/app/shared/state/assets.state.ts index 712f2d7f3..1a7f9ad11 100644 --- a/frontend/app/shared/state/assets.state.ts +++ b/frontend/app/shared/state/assets.state.ts @@ -28,13 +28,13 @@ import { } from './../services/assets.service'; import { AppsState } from './apps.state'; -import { SavedQuery } from './queries'; -import { encodeQuery, Query } from './query'; +import { Query } from './query'; export type AssetPathItem = { id: string, folderName: string }; -type TagsAvailable = { [name: string]: number }; -type TagsSelected = { [name: string]: boolean }; +export type TagsAvailable = { [name: string]: number }; +export type TagsSelected = { [name: string]: boolean }; +export type Tag = { name: string, count: number; }; const EMPTY_FOLDERS: { canCreate: boolean, items: ReadonlyArray } = { canCreate: false, items: [] }; @@ -59,9 +59,6 @@ interface Snapshot { // The query to filter assets. assetsQuery?: Query; - // The json of the assets query. - assetsQueryJson: string; - // The folder path. path: ReadonlyArray; @@ -144,7 +141,6 @@ export class AssetsState extends State { assetFolders: [], assets: [], assetsPager: Pager.fromLocalStore('assets', localStore, 30), - assetsQueryJson: '', path: ROOT_PATH, tagsAvailable: {}, tagsSelected: {} @@ -354,7 +350,6 @@ export class AssetsState extends State { if (query !== null) { newState.assetsQuery = query; - newState.assetsQueryJson = encodeQuery(query); } if (tags) { @@ -422,18 +417,6 @@ export class AssetsState extends State { return this.searchInternal(query); } - public isQueryUsed(saved: SavedQuery) { - return this.snapshot.assetsQueryJson === saved.queryJson; - } - - public isTagSelected(tag: string) { - return this.snapshot.tagsSelected[tag]; - } - - public isTagSelectionEmpty() { - return Object.keys(this.snapshot.tagsSelected).length === 0; - } - public get parentId() { return this.snapshot.path.length > 0 ? this.snapshot.path[this.snapshot.path.length - 1].id : undefined; } diff --git a/frontend/app/shared/state/clients.state.spec.ts b/frontend/app/shared/state/clients.state.spec.ts index 45cf9dac6..c235242f5 100644 --- a/frontend/app/shared/state/clients.state.spec.ts +++ b/frontend/app/shared/state/clients.state.spec.ts @@ -17,7 +17,7 @@ import { versioned } from '@app/shared/internal'; -import { createClients } from '../services/clients.service.spec'; +import { createClients } from './../services/clients.service.spec'; import { TestValues } from './_test-helpers'; diff --git a/frontend/app/shared/state/contents.forms.ts b/frontend/app/shared/state/contents.forms.ts index 6190c9360..20995de45 100644 --- a/frontend/app/shared/state/contents.forms.ts +++ b/frontend/app/shared/state/contents.forms.ts @@ -18,9 +18,9 @@ import { ValidatorsEx } from '@app/framework'; -import { ContentDto, ContentReferencesValue } from '../services/contents.service'; -import { LanguageDto } from '../services/languages.service'; import { AppLanguageDto } from './../services/app-languages.service'; +import { ContentDto, ContentReferencesValue } from './../services/contents.service'; +import { LanguageDto } from './../services/languages.service'; import { FieldDto, RootFieldDto, SchemaDetailsDto, TableField } from './../services/schemas.service'; import { ArrayFieldPropertiesDto, @@ -500,13 +500,13 @@ export class EditContentForm extends Form { public hasChanged() { const currentValue = this.form.getRawValue(); - return !Types.jsJsonEquals(this.initialData, currentValue); + return !Types.equals(this.initialData, currentValue); } public hasChanges(changes: any) { const currentValue = this.form.getRawValue(); - return !Types.jsJsonEquals(changes, currentValue); + return !Types.equals(changes, currentValue); } public arrayItemRemove(field: RootFieldDto, language: AppLanguageDto, index: number) { diff --git a/frontend/app/shared/state/contents.state.ts b/frontend/app/shared/state/contents.state.ts index 32025ef2d..e41e6a4e2 100644 --- a/frontend/app/shared/state/contents.state.ts +++ b/frontend/app/shared/state/contents.state.ts @@ -24,7 +24,7 @@ import { ContentDto, ContentsService, StatusInfo } from './../services/contents. import { SchemaDto } from './../services/schemas.service'; import { AppsState } from './apps.state'; import { SavedQuery } from './queries'; -import { encodeQuery, Query } from './query'; +import { Query } from './query'; import { SchemasState } from './schemas.state'; interface Snapshot { @@ -37,9 +37,6 @@ interface Snapshot { // The query to filter and sort contents. contentsQuery?: Query; - // The raw content query. - contentsQueryJson: string; - // Indicates if the contents are loaded. isLoaded?: boolean; @@ -97,7 +94,7 @@ export abstract class ContentsStateBase extends State { this.project(x => x.statuses); public statusQueries = - this.projectFrom(this.statuses, x => buildQueries(x)); + this.projectFrom(this.statuses, x => buildStatusQueries(x)); constructor( private readonly appsState: AppsState, @@ -107,8 +104,7 @@ export abstract class ContentsStateBase extends State { ) { super({ contents: [], - contentsPager: Pager.fromLocalStore('contents', localStore), - contentsQueryJson: '' + contentsPager: Pager.fromLocalStore('contents', localStore) }); this.contentsPager.subscribe(pager => { @@ -313,7 +309,7 @@ export abstract class ContentsStateBase extends State { } public search(contentsQuery?: Query): Observable { - this.next(s => ({ ...s, contentsPager: s.contentsPager.reset(), contentsQuery, contentsQueryJson: encodeQuery(contentsQuery) })); + this.next(s => ({ ...s, contentsPager: s.contentsPager.reset(), contentsQuery })); return this.loadInternal(false); } @@ -323,11 +319,6 @@ export abstract class ContentsStateBase extends State { return this.loadInternal(false); } - - public isQueryUsed(saved: SavedQuery) { - return this.snapshot.contentsQueryJson === saved.queryJson; - } - private get appName() { return this.appsState.appName; } @@ -383,13 +374,11 @@ export class ManualContentsState extends ContentsStateBase { } } -export type ContentQuery = { color: string; } & SavedQuery; - -function buildQueries(statuses: ReadonlyArray | undefined): ReadonlyArray { - return statuses ? statuses.map(s => buildQuery(s)) : []; +function buildStatusQueries(statuses: ReadonlyArray | undefined): ReadonlyArray { + return statuses ? statuses.map(s => buildStatusQuery(s)) : []; } -function buildQuery(s: StatusInfo) { +function buildStatusQuery(s: StatusInfo) { const query = { filter: { and: [ @@ -398,5 +387,5 @@ function buildQuery(s: StatusInfo) { } }; - return ({ name: s.status, color: s.color, query, queryJson: encodeQuery(query) }); + return ({ name: s.status, color: s.color, query }); } diff --git a/frontend/app/shared/state/contributors.forms.ts b/frontend/app/shared/state/contributors.forms.ts index 447079c4d..96f01e7bf 100644 --- a/frontend/app/shared/state/contributors.forms.ts +++ b/frontend/app/shared/state/contributors.forms.ts @@ -15,7 +15,7 @@ import { value$ } from '@app/framework'; -import { AssignContributorDto } from '../services/contributors.service'; +import { AssignContributorDto } from './../services/contributors.service'; import { UserDto } from './../services/users.service'; diff --git a/frontend/app/shared/state/contributors.state.spec.ts b/frontend/app/shared/state/contributors.state.spec.ts index d87a6c3d1..aec4e5708 100644 --- a/frontend/app/shared/state/contributors.state.spec.ts +++ b/frontend/app/shared/state/contributors.state.spec.ts @@ -20,7 +20,7 @@ import { versioned } from '@app/shared/internal'; -import { createContributors } from '../services/contributors.service.spec'; +import { createContributors } from './../services/contributors.service.spec'; import { ErrorDto } from '@app/framework'; import { TestValues } from './_test-helpers'; diff --git a/frontend/app/shared/state/languages.state.spec.ts b/frontend/app/shared/state/languages.state.spec.ts index c084c34ad..ed0fe34f7 100644 --- a/frontend/app/shared/state/languages.state.spec.ts +++ b/frontend/app/shared/state/languages.state.spec.ts @@ -19,7 +19,7 @@ import { versioned } from '@app/shared/internal'; -import { createLanguages } from '../services/app-languages.service.spec'; +import { createLanguages } from './../services/app-languages.service.spec'; import { TestValues } from './_test-helpers'; diff --git a/frontend/app/shared/state/patterns.state.spec.ts b/frontend/app/shared/state/patterns.state.spec.ts index ea0d64533..9ba1775f6 100644 --- a/frontend/app/shared/state/patterns.state.spec.ts +++ b/frontend/app/shared/state/patterns.state.spec.ts @@ -17,7 +17,7 @@ import { versioned } from '@app/shared/internal'; -import { createPatterns } from '../services/patterns.service.spec'; +import { createPatterns } from './../services/patterns.service.spec'; import { TestValues } from './_test-helpers'; diff --git a/frontend/app/shared/state/queries.spec.ts b/frontend/app/shared/state/queries.spec.ts index f2e8a2268..87e4acbfd 100644 --- a/frontend/app/shared/state/queries.spec.ts +++ b/frontend/app/shared/state/queries.spec.ts @@ -9,7 +9,6 @@ import { BehaviorSubject } from 'rxjs'; import { IMock, Mock, Times } from 'typemoq'; import { - encodeQuery, Queries, SavedQuery, UIState @@ -60,17 +59,11 @@ describe('Queries', () => { expect(converted!).toEqual([ { - name: 'key1', - query: { fullText: 'merged1' }, - queryJson: encodeQuery({ fullText: 'merged1' }) + name: 'key1', query: { fullText: 'merged1' } }, { - name: 'key2', - query: { fullText: 'merged2' }, - queryJson: encodeQuery({ fullText: 'merged2' }) + name: 'key2', query: { fullText: 'merged2' } }, { - name: 'key3', - query: undefined, - queryJson: '' + name: 'key3', query: undefined } ]); }); @@ -84,9 +77,7 @@ describe('Queries', () => { expect(converted!).toEqual([ { - name: 'key1', - query: { fullText: 'shared1' }, - queryJson: encodeQuery({ fullText: 'shared1' }) + name: 'key1', query: { fullText: 'shared1' } } ]); }); @@ -100,9 +91,7 @@ describe('Queries', () => { expect(converted!).toEqual([ { - name: 'key1', - query: { fullText: 'user1' }, - queryJson: encodeQuery({ fullText: 'user1' }) + name: 'key1', query: { fullText: 'user1' } } ]); }); diff --git a/frontend/app/shared/state/queries.ts b/frontend/app/shared/state/queries.ts index 86a2bc29d..479171885 100644 --- a/frontend/app/shared/state/queries.ts +++ b/frontend/app/shared/state/queries.ts @@ -8,21 +8,25 @@ import { Observable } from 'rxjs'; import { map, shareReplay } from 'rxjs/operators'; -import { compareStrings, Types } from '@app/framework'; +import { compareStrings } from '@app/framework'; -import { UIState } from './ui.state'; +import { + decodeQuery, + equalsQuery, + Query +} from './query'; -import { encodeQuery, Query } from './query'; +import { UIState } from './ui.state'; export interface SavedQuery { + // The optional color. + color?: string; + // The name of the query. name: string; // The deserialized value. query?: Query; - - // The raw value of the query. - queryJson?: string; } const OLDEST_FIRST: Query = { @@ -37,8 +41,8 @@ export class Queries { public queriesUser: Observable>; public defaultQueries: ReadonlyArray = [ - { name: 'All (newest first)', queryJson: '' }, - { name: 'All (oldest first)', queryJson: encodeQuery(OLDEST_FIRST), query: OLDEST_FIRST } + { name: 'All (newest first)' }, + { name: 'All (oldest first)', query: OLDEST_FIRST } ]; constructor( @@ -78,12 +82,10 @@ export class Queries { } public getSaveKey(query: Query): Observable { - const json = encodeQuery(query); - return this.queries.pipe( map(queries => { for (const saved of queries) { - if (saved.queryJson === json) { + if (equalsQuery(saved.query, query)) { return saved.name; } } @@ -100,17 +102,7 @@ function parseQueries(settings: {}) { } export function parseStored(name: string, raw?: string) { - if (Types.isString(raw)) { - let query: Query; - - if (raw.indexOf('{') === 0) { - query = JSON.parse(raw); - } else { - query = { fullText: raw }; - } - - return { name, query, queryJson: encodeQuery(query) }; - } + const query = decodeQuery(raw); - return { name, query: undefined, queryJson: '' }; + return { name, query }; } \ No newline at end of file diff --git a/frontend/app/shared/state/query.spec.ts b/frontend/app/shared/state/query.spec.ts new file mode 100644 index 000000000..f2ead7f8b --- /dev/null +++ b/frontend/app/shared/state/query.spec.ts @@ -0,0 +1,56 @@ +/* + * Squidex Headless CMS + * + * @license + * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. + */ + +import { Query } from '@app/shared/internal'; +import { equalsQuery } from './query'; + +describe('equalsQuery', () => { + it('should return true when comparing with empty query', () => { + const lhs: Query = {}; + + const rhs: Query = { + filter: { + and: [] + }, + sort: [] + }; + + expect(equalsQuery(lhs, rhs)).toBeTruthy(); + }); + + it('should return true when comparing without sort', () => { + const lhs: Query = { + filter: { + and: [] + } + }; + + const rhs: Query = { + filter: { + and: [] + }, + sort: [] + }; + + expect(equalsQuery(lhs, rhs)).toBeTruthy(); + }); + + it('should return true when comparing without filter', () => { + const lhs: Query = { + sort: [] + }; + + const rhs: Query = { + filter: { + and: [] + }, + sort: [] + }; + + expect(equalsQuery(lhs, rhs)).toBeTruthy(); + }); +}); \ No newline at end of file diff --git a/frontend/app/shared/state/query.ts b/frontend/app/shared/state/query.ts index 05ae4e24f..197bb655d 100644 --- a/frontend/app/shared/state/query.ts +++ b/frontend/app/shared/state/query.ts @@ -75,7 +75,7 @@ export interface FilterLogical { // The child filters if the logical filter is a conjunction (AND). and?: FilterNode[]; - // The child filters if the logical filter is a disjunction (OR). + // The child filters if the logical filter is a conjunction (AND). or?: FilterNode[]; } @@ -106,12 +106,17 @@ export interface Query { skip?: number; } -export function encodeQuery(query?: Query) { - if (Types.isEmpty(query)) { - return ''; - } +const DEFAULT_QUERY = { + filter: { + and: [] + }, + sort: [] +}; - query = { ...query }; +function santize(query?: Query) { + if (!query) { + return DEFAULT_QUERY; + } if (!query.sort) { query.sort = []; @@ -121,7 +126,33 @@ export function encodeQuery(query?: Query) { query.filter = { and: [] }; } - return encodeURIComponent(JSON.stringify(query)); + return query; +} + +export function equalsQuery(lhs?: Query, rhs?: Query) { + return Types.equals(santize(lhs), santize(rhs)); +} + +export function encodeQuery(query?: Query) { + return encodeURIComponent(JSON.stringify(santize(query))); +} + +export function decodeQuery(raw?: string): Query | undefined { + let query: Query | undefined = undefined; + + try { + if (Types.isString(raw)) { + if (raw.indexOf('{') === 0) { + query = JSON.parse(raw); + } else { + query = { fullText: raw }; + } + } + } catch (ex) { + query = undefined; + } + + return query; } export function hasFilter(query?: Query) { diff --git a/frontend/app/shared/state/roles.state.spec.ts b/frontend/app/shared/state/roles.state.spec.ts index 555d276e5..03d5f7b38 100644 --- a/frontend/app/shared/state/roles.state.spec.ts +++ b/frontend/app/shared/state/roles.state.spec.ts @@ -17,7 +17,7 @@ import { versioned } from '@app/shared/internal'; -import { createRoles } from '../services/roles.service.spec'; +import { createRoles } from './../services/roles.service.spec'; import { TestValues } from './_test-helpers'; diff --git a/frontend/app/shared/state/rule-events.state.spec.ts b/frontend/app/shared/state/rule-events.state.spec.ts index e17aac7a9..98b548be1 100644 --- a/frontend/app/shared/state/rule-events.state.spec.ts +++ b/frontend/app/shared/state/rule-events.state.spec.ts @@ -18,7 +18,7 @@ import { RulesService } from '@app/shared/internal'; -import { createRuleEvent } from '../services/rules.service.spec'; +import { createRuleEvent } from './../services/rules.service.spec'; import { TestValues } from './_test-helpers'; diff --git a/frontend/app/shared/state/rules.state.spec.ts b/frontend/app/shared/state/rules.state.spec.ts index afc8afbe5..99109dfdd 100644 --- a/frontend/app/shared/state/rules.state.spec.ts +++ b/frontend/app/shared/state/rules.state.spec.ts @@ -18,7 +18,7 @@ import { versioned } from '@app/shared/internal'; -import { createRule } from '../services/rules.service.spec'; +import { createRule } from './../services/rules.service.spec'; import { TestValues } from './_test-helpers'; diff --git a/frontend/app/shared/state/schemas.state.spec.ts b/frontend/app/shared/state/schemas.state.spec.ts index 6515f2732..87af44e05 100644 --- a/frontend/app/shared/state/schemas.state.spec.ts +++ b/frontend/app/shared/state/schemas.state.spec.ts @@ -20,7 +20,7 @@ import { versioned } from '@app/shared/internal'; -import { createSchema, createSchemaDetails } from '../services/schemas.service.spec'; +import { createSchema, createSchemaDetails } from './../services/schemas.service.spec'; import { TestValues } from './_test-helpers'; diff --git a/frontend/app/shared/state/table-fields.ts b/frontend/app/shared/state/table-fields.ts index 1822d86f8..af17bcea6 100644 --- a/frontend/app/shared/state/table-fields.ts +++ b/frontend/app/shared/state/table-fields.ts @@ -14,7 +14,7 @@ import { MetaFields, SchemaDetailsDto, TableField -} from '../services/schemas.service'; +} from './../services/schemas.service'; import { UIState } from './ui.state'; diff --git a/frontend/app/shared/state/ui.state.ts b/frontend/app/shared/state/ui.state.ts index 38249d292..451822764 100644 --- a/frontend/app/shared/state/ui.state.ts +++ b/frontend/app/shared/state/ui.state.ts @@ -10,7 +10,6 @@ import { distinctUntilChanged, map } from 'rxjs/operators'; import { hasAnyLink, - mergeInto, State, Types } from '@app/framework'; @@ -272,9 +271,9 @@ function getContainer(settings: object, path: string) { function updateSettings(state: Snapshot, update: Partial) { const settings = {}; - mergeInto(settings, update.settingsCommon || state.settingsCommon); - mergeInto(settings, update.settingsShared || state.settingsShared); - mergeInto(settings, update.settingsUser || state.settingsUser); + Types.mergeInto(settings, update.settingsCommon || state.settingsCommon); + Types.mergeInto(settings, update.settingsShared || state.settingsShared); + Types.mergeInto(settings, update.settingsUser || state.settingsUser); return { ...state, settings, ...update }; } \ No newline at end of file diff --git a/frontend/app/shared/state/workflows.state.spec.ts b/frontend/app/shared/state/workflows.state.spec.ts index 343ff0bda..8bd7259a3 100644 --- a/frontend/app/shared/state/workflows.state.spec.ts +++ b/frontend/app/shared/state/workflows.state.spec.ts @@ -17,7 +17,7 @@ import { WorkflowsState } from '@app/shared/internal'; -import { createWorkflows } from '../services/workflows.service.spec'; +import { createWorkflows } from './../services/workflows.service.spec'; import { TestValues } from './_test-helpers'; diff --git a/frontend/app/shell/pages/app/app-area.component.scss b/frontend/app/shell/pages/app/app-area.component.scss index d1951ab29..e69de29bb 100644 --- a/frontend/app/shell/pages/app/app-area.component.scss +++ b/frontend/app/shell/pages/app/app-area.component.scss @@ -1,2 +0,0 @@ -@import '_mixins'; -@import '_vars'; \ No newline at end of file diff --git a/frontend/app/shell/pages/app/left-menu.component.scss b/frontend/app/shell/pages/app/left-menu.component.scss index d1951ab29..e69de29bb 100644 --- a/frontend/app/shell/pages/app/left-menu.component.scss +++ b/frontend/app/shell/pages/app/left-menu.component.scss @@ -1,2 +0,0 @@ -@import '_mixins'; -@import '_vars'; \ No newline at end of file diff --git a/frontend/app/shell/pages/forbidden/forbidden-page.component.html b/frontend/app/shell/pages/forbidden/forbidden-page.component.html new file mode 100644 index 000000000..34f2cf6e2 --- /dev/null +++ b/frontend/app/shell/pages/forbidden/forbidden-page.component.html @@ -0,0 +1,7 @@ + + + \ No newline at end of file diff --git a/frontend/app/shell/pages/forbidden/forbidden-page.component.scss b/frontend/app/shell/pages/forbidden/forbidden-page.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/shell/pages/forbidden/forbidden-page.component.ts b/frontend/app/shell/pages/forbidden/forbidden-page.component.ts index ea774b467..6bde5d3f0 100644 --- a/frontend/app/shell/pages/forbidden/forbidden-page.component.ts +++ b/frontend/app/shell/pages/forbidden/forbidden-page.component.ts @@ -10,15 +10,8 @@ import { Component } from '@angular/core'; @Component({ selector: 'sqx-forbidden-page', - template: ` - - - - ` + styleUrls: ['./forbidden-page.component.scss'], + templateUrl: './forbidden-page.component.html' }) export class ForbiddenPageComponent { constructor( diff --git a/frontend/app/shell/pages/home/home-page.component.scss b/frontend/app/shell/pages/home/home-page.component.scss index ff429bbd1..6380c882c 100644 --- a/frontend/app/shell/pages/home/home-page.component.scss +++ b/frontend/app/shell/pages/home/home-page.component.scss @@ -1,6 +1,3 @@ -@import '_mixins'; -@import '_vars'; - .card { & { position: relative; diff --git a/frontend/app/shell/pages/internal/apps-menu.component.scss b/frontend/app/shell/pages/internal/apps-menu.component.scss index f26f0ba08..c36fd6566 100644 --- a/frontend/app/shell/pages/internal/apps-menu.component.scss +++ b/frontend/app/shell/pages/internal/apps-menu.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - $color-apps-border: #65a6ff; $color-nav-shadow: rgba(26, 93, 184, .26); diff --git a/frontend/app/shell/pages/internal/internal-area.component.scss b/frontend/app/shell/pages/internal/internal-area.component.scss index c7c30c672..89ef6d739 100644 --- a/frontend/app/shell/pages/internal/internal-area.component.scss +++ b/frontend/app/shell/pages/internal/internal-area.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .navbar { @include box-shadow(0, 3px, 5px, .13); display: block; diff --git a/frontend/app/shell/pages/internal/logo.component.html b/frontend/app/shell/pages/internal/logo.component.html new file mode 100644 index 000000000..45f21cbe7 --- /dev/null +++ b/frontend/app/shell/pages/internal/logo.component.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/frontend/app/shell/pages/internal/logo.component.scss b/frontend/app/shell/pages/internal/logo.component.scss new file mode 100644 index 000000000..5238db8dd --- /dev/null +++ b/frontend/app/shell/pages/internal/logo.component.scss @@ -0,0 +1,3 @@ +.loader { + @include absolute(12px, null, null, 40px); +} \ No newline at end of file diff --git a/frontend/app/shell/pages/internal/logo.component.ts b/frontend/app/shell/pages/internal/logo.component.ts index fc495e321..08834d965 100644 --- a/frontend/app/shell/pages/internal/logo.component.ts +++ b/frontend/app/shell/pages/internal/logo.component.ts @@ -9,16 +9,8 @@ import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; @Component({ selector: 'sqx-logo', - template: ` - - - - `, - styles: [` - .loader { - position: absolute; top: 12px; left: 40px; - }` - ], + styleUrls: ['./logo.component.scss'], + templateUrl: './logo.component.html', changeDetection: ChangeDetectionStrategy.OnPush }) export class LogoComponent { diff --git a/frontend/app/shell/pages/internal/notifications-menu.component.scss b/frontend/app/shell/pages/internal/notifications-menu.component.scss index 8a8d11e5e..810dfdde1 100644 --- a/frontend/app/shell/pages/internal/notifications-menu.component.scss +++ b/frontend/app/shell/pages/internal/notifications-menu.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .dropdown-menu { left: auto; max-height: 500px; diff --git a/frontend/app/shell/pages/internal/profile-menu.component.scss b/frontend/app/shell/pages/internal/profile-menu.component.scss index d4d050abf..e74a238a0 100644 --- a/frontend/app/shell/pages/internal/profile-menu.component.scss +++ b/frontend/app/shell/pages/internal/profile-menu.component.scss @@ -1,6 +1,3 @@ -@import '_vars'; -@import '_mixins'; - .user-picture { margin-right: .5rem; } diff --git a/frontend/app/shell/pages/not-found/not-found-page.component.html b/frontend/app/shell/pages/not-found/not-found-page.component.html new file mode 100644 index 000000000..581416c33 --- /dev/null +++ b/frontend/app/shell/pages/not-found/not-found-page.component.html @@ -0,0 +1,7 @@ + + + \ No newline at end of file diff --git a/frontend/app/shell/pages/not-found/not-found-page.component.scss b/frontend/app/shell/pages/not-found/not-found-page.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/app/shell/pages/not-found/not-found-page.component.ts b/frontend/app/shell/pages/not-found/not-found-page.component.ts index 55748b9e4..4df1b1a22 100644 --- a/frontend/app/shell/pages/not-found/not-found-page.component.ts +++ b/frontend/app/shell/pages/not-found/not-found-page.component.ts @@ -10,15 +10,8 @@ import { Component } from '@angular/core'; @Component({ selector: 'sqx-not-found-page', - template: ` - - - - ` + styleUrls: ['./not-found-page.component.scss'], + templateUrl: './not-found-page.component.html' }) export class NotFoundPageComponent { constructor( diff --git a/frontend/app/theme/_bootstrap.scss b/frontend/app/theme/_bootstrap.scss index b1fb039fa..8e496e758 100644 --- a/frontend/app/theme/_bootstrap.scss +++ b/frontend/app/theme/_bootstrap.scss @@ -1,6 +1,3 @@ -@import '_mixins'; -@import '_vars'; - @import './../../node_modules/bootstrap/scss/mixins/_buttons'; // diff --git a/frontend/app/theme/_common.scss b/frontend/app/theme/_common.scss index b7e42acf0..825861359 100644 --- a/frontend/app/theme/_common.scss +++ b/frontend/app/theme/_common.scss @@ -1,6 +1,3 @@ -@import '_mixins'; -@import '_vars'; - body { // Default body with padding for fixed navbar and sidebar. & { diff --git a/frontend/app/theme/_forms.scss b/frontend/app/theme/_forms.scss index 7720c1cc6..635be9c4d 100644 --- a/frontend/app/theme/_forms.scss +++ b/frontend/app/theme/_forms.scss @@ -1,6 +1,3 @@ -@import '_mixins'; -@import '_vars'; - // // Support for Angular validation states. // diff --git a/frontend/app/theme/_lists.scss b/frontend/app/theme/_lists.scss index 123c2383a..2eed758b6 100644 --- a/frontend/app/theme/_lists.scss +++ b/frontend/app/theme/_lists.scss @@ -1,6 +1,3 @@ -@import '_mixins'; -@import '_vars'; - // // Custom list that can either be used with a table or divs. // diff --git a/frontend/app/theme/_panels.scss b/frontend/app/theme/_panels.scss index 5bbbad9a0..98c94f2c7 100644 --- a/frontend/app/theme/_panels.scss +++ b/frontend/app/theme/_panels.scss @@ -1,6 +1,3 @@ -@import '_mixins'; -@import '_vars'; - @mixin panel-icon { color: $color-border-dark; cursor: pointer; diff --git a/frontend/app/theme/_static.scss b/frontend/app/theme/_static.scss index 31238cec0..897c2b75d 100644 --- a/frontend/app/theme/_static.scss +++ b/frontend/app/theme/_static.scss @@ -1,6 +1,3 @@ -@import '_mixins'; -@import '_vars'; - // // Noscript element with warning, when javascript is disabled. // diff --git a/frontend/tsconfig.app.json b/frontend/tsconfig.app.json new file mode 100644 index 000000000..4560f5ea2 --- /dev/null +++ b/frontend/tsconfig.app.json @@ -0,0 +1,13 @@ +{ + "extends": "./tsconfig.json", + "files": [ + "app/app.ts", + "app/shims.ts" + ], + "include": [ + "app/**/*.d.ts" + ], + "exclude": [ + "app/**/*.spec.ts" + ] +} \ No newline at end of file diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json index d048e00b5..27049ebb1 100644 --- a/frontend/tsconfig.json +++ b/frontend/tsconfig.json @@ -1,30 +1,36 @@ { - "compilerOptions": { - "allowSyntheticDefaultImports": true, - "baseUrl": ".", - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "incremental": true, - "importHelpers": true, - "lib": ["es6", "esnext", "dom"], - "moduleResolution": "node", - "module": "esnext", - "noEmitHelpers": true, - "noImplicitAny": true, - "noUnusedLocals": true, - "noUnusedParameters": false, - "removeComments": false, - "sourceMap": true, - "strictNullChecks": true, - "suppressImplicitAnyIndexErrors": true, - "target": "es5", - "paths": { - "@app*": [ - "app*" - ] + "compilerOptions": { + "allowSyntheticDefaultImports": true, + "baseUrl": ".", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "incremental": true, + "importHelpers": true, + "lib": [ + "es6", + "esnext", + "dom" + ], + "moduleResolution": "node", + "module": "esnext", + "noEmitHelpers": true, + "noImplicitAny": true, + "noUnusedLocals": true, + "noUnusedParameters": false, + "removeComments": false, + "sourceMap": true, + "strictNullChecks": true, + "suppressImplicitAnyIndexErrors": true, + "target": "es5", + "paths": { + "@app*": [ + "app*" + ] + }, + }, + "angularCompilerOptions": { + "fullTemplateTypeCheck": true, + // https://angular.io/guide/angular-compiler-options + "strictInjectionParameters": true } - }, - "angularCompilerOptions": { - "fullTemplateTypeCheck": true - } } \ No newline at end of file diff --git a/frontend/tsconfig.spec.json b/frontend/tsconfig.spec.json new file mode 100644 index 000000000..d6cc42f32 --- /dev/null +++ b/frontend/tsconfig.spec.json @@ -0,0 +1,3 @@ +{ + "extends": "./tsconfig.json" +} \ No newline at end of file