@salesforce/ui-bundle-template-app-angular-template-b2e 11.31.11 → 11.31.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/CHANGELOG.md +16 -0
- package/dist/force-app/main/default/applications/{angularinternalapp.app-meta.xml → angularintapp.app-meta.xml} +2 -2
- package/dist/force-app/main/default/permissionsets/{angularinternalapp_Access.permissionset-meta.xml → angularintapp_Access.permissionset-meta.xml} +2 -2
- package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/angular.json +7 -4
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/angularinternalapp.uibundle-meta.xml → angularintapp/angularintapp.uibundle-meta.xml} +1 -1
- package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/src/app/app.routes.ts +5 -5
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/layout/app-layout/app-layout.component.html → angularintapp/src/app/components/layout/app-layout/app-layout.html} +17 -17
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/layout/app-layout/app-layout.component.spec.ts → angularintapp/src/app/components/layout/app-layout/app-layout.spec.ts} +2 -2
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/layout/app-layout/app-layout.component.ts → angularintapp/src/app/components/layout/app-layout/app-layout.ts} +2 -2
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/ui/alert/alert.component.ts → angularintapp/src/app/components/ui/alert/alert.ts} +1 -1
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/ui/button/button.component.ts → angularintapp/src/app/components/ui/button/button.ts} +2 -2
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/ui/card/card.component.ts → angularintapp/src/app/components/ui/card/card.ts} +1 -1
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/ui/collapsible/collapsible.component.ts → angularintapp/src/app/components/ui/collapsible/collapsible.ts} +1 -1
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/ui/date-picker/date-picker.component.ts → angularintapp/src/app/components/ui/date-picker/date-picker.ts} +2 -2
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/ui/date-range-picker/date-range-picker.component.ts → angularintapp/src/app/components/ui/date-range-picker/date-range-picker.ts} +2 -2
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/ui/dialog/dialog.component.ts → angularintapp/src/app/components/ui/dialog/dialog.ts} +1 -1
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/ui/field/field.component.ts → angularintapp/src/app/components/ui/field/field.ts} +1 -1
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/ui/input/input.component.ts → angularintapp/src/app/components/ui/input/input.ts} +2 -2
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/ui/label/label.component.ts → angularintapp/src/app/components/ui/label/label.ts} +1 -1
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/ui/paginator/paginator.component.ts → angularintapp/src/app/components/ui/paginator/paginator.ts} +1 -1
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/ui/popover/popover.component.ts → angularintapp/src/app/components/ui/popover/popover.ts} +1 -1
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/ui/select/select.component.ts → angularintapp/src/app/components/ui/select/select.ts} +2 -2
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/ui/separator/separator.component.ts → angularintapp/src/app/components/ui/separator/separator.ts} +2 -2
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/ui/skeleton/skeleton.component.ts → angularintapp/src/app/components/ui/skeleton/skeleton.ts} +2 -2
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/features/agentforce/agentforce-conversation-client/agentforce-conversation-client.component.html → angularintapp/src/app/features/agentforce/conversation.html} +1 -1
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/features/agentforce/agentforce-conversation-client/agentforce-conversation-client.component.ts → angularintapp/src/app/features/agentforce/conversation.ts} +3 -3
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/features/object-search/breadcrumb/breadcrumb.html +54 -0
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/features/object-search/components/object-breadcrumb/object-breadcrumb.component.ts → angularintapp/src/app/features/object-search/breadcrumb/breadcrumb.ts} +2 -2
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/features/object-search/filters/active-filters.html +23 -0
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/features/object-search/components/active-filters/active-filters.component.ts → angularintapp/src/app/features/object-search/filters/active-filters.ts} +4 -4
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/features/object-search/components/filters/date-filter/date-filter.component.ts → angularintapp/src/app/features/object-search/filters/date-filter.ts} +6 -6
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/features/object-search/components/filters/date-range-filter/date-range-filter.component.ts → angularintapp/src/app/features/object-search/filters/date-range-filter.ts} +6 -6
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/features/object-search/components/filters/filter-field-wrapper/filter-field-wrapper.component.html → angularintapp/src/app/features/object-search/filters/filter-field-wrapper.html} +2 -2
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/features/object-search/components/filters/filter-field-wrapper/filter-field-wrapper.component.ts → angularintapp/src/app/features/object-search/filters/filter-field-wrapper.ts} +3 -3
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/features/object-search/components/filters/multi-select-filter/multi-select-filter.component.ts → angularintapp/src/app/features/object-search/filters/multi-select-filter.ts} +6 -6
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/features/object-search/components/filters/numeric-range-filter/numeric-range-filter.component.ts → angularintapp/src/app/features/object-search/filters/numeric-range-filter.ts} +6 -6
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/features/object-search/components/filters/search-filter/search-filter.component.ts → angularintapp/src/app/features/object-search/filters/search-filter.ts} +6 -6
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/features/object-search/components/filters/select-filter/select-filter.component.ts → angularintapp/src/app/features/object-search/filters/select-filter.ts} +5 -5
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/features/object-search/components/filters/text-filter/text-filter.component.ts → angularintapp/src/app/features/object-search/filters/text-filter.ts} +6 -6
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/features/object-search/components/pagination-controls/pagination-controls.component.ts → angularintapp/src/app/features/object-search/pagination/pagination.ts} +3 -3
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/features/object-search/components/search-bar/search-bar.component.html → angularintapp/src/app/features/object-search/search-bar/search-bar.html} +5 -5
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/features/object-search/components/search-bar/search-bar.component.ts → angularintapp/src/app/features/object-search/search-bar/search-bar.ts} +6 -6
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/features/object-search/sort-control/sort-control.html +50 -0
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/features/object-search/components/sort-control/sort-control.component.ts → angularintapp/src/app/features/object-search/sort-control/sort-control.ts} +5 -5
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/pages/account-detail/account-detail-page.html +164 -0
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/pages/account-detail/account-detail-page.component.ts → angularintapp/src/app/pages/account-detail/account-detail-page.ts} +9 -12
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/pages/account-search/account-search-page.html +111 -0
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/pages/account-search/account-search-page.component.ts → angularintapp/src/app/pages/account-search/account-search-page.ts} +15 -15
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/pages/home/home-page.component.ts → angularintapp/src/app/pages/home/home-page.ts} +3 -3
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/pages/home/home.component.spec.ts → angularintapp/src/app/pages/home/home.spec.ts} +1 -1
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/pages/home/home.component.ts → angularintapp/src/app/pages/home/home.ts} +1 -1
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/pages/not-found/not-found.component.spec.ts → angularintapp/src/app/pages/not-found/not-found.spec.ts} +1 -1
- package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/pages/not-found/not-found.component.ts → angularintapp/src/app/pages/not-found/not-found.ts} +1 -1
- package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/src/index.ts +1 -1
- package/dist/package-lock.json +2 -2
- package/dist/package.json +1 -1
- package/dist/scripts/org-setup.config.json +1 -1
- package/package.json +1 -1
- package/dist/force-app/main/default/uiBundles/angularinternalapp/src/app/features/object-search/components/active-filters/active-filters.component.html +0 -23
- package/dist/force-app/main/default/uiBundles/angularinternalapp/src/app/features/object-search/components/object-breadcrumb/object-breadcrumb.component.html +0 -55
- package/dist/force-app/main/default/uiBundles/angularinternalapp/src/app/features/object-search/components/sort-control/sort-control.component.html +0 -50
- package/dist/force-app/main/default/uiBundles/angularinternalapp/src/app/pages/account-detail/account-detail-page.component.html +0 -174
- package/dist/force-app/main/default/uiBundles/angularinternalapp/src/app/pages/account-search/account-search-page.component.html +0 -111
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/.forceignore +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/.postcssrc.json +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/.prettierignore +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/.prettierrc +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/CHANGELOG.md +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/README.md +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/e2e/app.spec.ts +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/esbuild/api-version.mjs +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/eslint.config.js +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/middleware/html.mjs +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/middleware/proxy.mjs +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/package.json +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/playwright.config.ts +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/public/favicon.ico +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/scripts/rewrite-e2e-assets.mjs +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/src/app/api/account/account-search.service.ts +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/src/app/api/account/distinctAccountIndustries.ts +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/src/app/api/account/distinctAccountTypes.ts +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/src/app/api/account/getAccountDetail.ts +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/src/app/api/account/searchAccounts.ts +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/src/app/api/data-client.service.spec.ts +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/src/app/api/data-client.service.ts +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/src/app/app.config.ts +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/src/app/app.html +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/src/app/app.spec.ts +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/src/app/app.ts +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/src/app/components/ui/_field-size.scss +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/ui/alert/alert.component.html → angularintapp/src/app/components/ui/alert/alert.html} +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/ui/button/button.component.html → angularintapp/src/app/components/ui/button/button.html} +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/ui/button/button.component.scss → angularintapp/src/app/components/ui/button/button.scss} +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/ui/card/card.component.scss → angularintapp/src/app/components/ui/card/card.scss} +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/ui/collapsible/collapsible.component.html → angularintapp/src/app/components/ui/collapsible/collapsible.html} +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/ui/date-picker/date-picker.component.html → angularintapp/src/app/components/ui/date-picker/date-picker.html} +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/ui/date-picker/date-picker.component.scss → angularintapp/src/app/components/ui/date-picker/date-picker.scss} +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/ui/date-range-picker/date-range-picker.component.html → angularintapp/src/app/components/ui/date-range-picker/date-range-picker.html} +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/ui/date-range-picker/date-range-picker.component.scss → angularintapp/src/app/components/ui/date-range-picker/date-range-picker.scss} +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/ui/dialog/dialog.component.html → angularintapp/src/app/components/ui/dialog/dialog.html} +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/ui/field/field.component.html → angularintapp/src/app/components/ui/field/field.html} +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/src/app/components/ui/field-size.ts +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/ui/input/input.component.html → angularintapp/src/app/components/ui/input/input.html} +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/ui/input/input.component.scss → angularintapp/src/app/components/ui/input/input.scss} +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/ui/label/label.component.html → angularintapp/src/app/components/ui/label/label.html} +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/ui/paginator/paginator.component.html → angularintapp/src/app/components/ui/paginator/paginator.html} +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/ui/popover/popover.component.html → angularintapp/src/app/components/ui/popover/popover.html} +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/ui/select/select.component.html → angularintapp/src/app/components/ui/select/select.html} +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/ui/select/select.component.scss → angularintapp/src/app/components/ui/select/select.scss} +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/ui/separator/separator.component.html → angularintapp/src/app/components/ui/separator/separator.html} +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/ui/separator/separator.component.scss → angularintapp/src/app/components/ui/separator/separator.scss} +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/ui/skeleton/skeleton.component.html → angularintapp/src/app/components/ui/skeleton/skeleton.html} +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/ui/skeleton/skeleton.component.scss → angularintapp/src/app/components/ui/skeleton/skeleton.scss} +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/components/ui/spinner/spinner.component.ts → angularintapp/src/app/components/ui/spinner/spinner.ts} +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/src/app/features/agentforce/agentforce-embed.service.ts +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/features/object-search/components/filters/date-filter/date-filter.component.html → angularintapp/src/app/features/object-search/filters/date-filter.html} +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/features/object-search/components/filters/date-range-filter/date-range-filter.component.html → angularintapp/src/app/features/object-search/filters/date-range-filter.html} +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/features/object-search/components/filters/multi-select-filter/multi-select-filter.component.html → angularintapp/src/app/features/object-search/filters/multi-select-filter.html} +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/features/object-search/components/filters/numeric-range-filter/numeric-range-filter.component.html → angularintapp/src/app/features/object-search/filters/numeric-range-filter.html} +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/features/object-search/components/filters/search-filter/search-filter.component.html → angularintapp/src/app/features/object-search/filters/search-filter.html} +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/features/object-search/components/filters/select-filter/select-filter.component.html → angularintapp/src/app/features/object-search/filters/select-filter.html} +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/features/object-search/components/filters/text-filter/text-filter.component.html → angularintapp/src/app/features/object-search/filters/text-filter.html} +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/src/app/features/object-search/object-search-state.service.ts +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/features/object-search/components/pagination-controls/pagination-controls.component.html → angularintapp/src/app/features/object-search/pagination/pagination.html} +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/src/app/features/object-search/utils/debounce.ts +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/src/app/features/object-search/utils/field-utils.ts +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/src/app/features/object-search/utils/filter-utils.ts +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/src/app/features/object-search/utils/index.ts +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/src/app/features/object-search/utils/sort-utils.ts +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/pages/account-detail/account-detail-page.component.scss → angularintapp/src/app/pages/account-detail/account-detail-page.scss} +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/pages/home/home-page.component.html → angularintapp/src/app/pages/home/home-page.html} +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/pages/home/home.component.html → angularintapp/src/app/pages/home/home.html} +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp/src/app/pages/not-found/not-found.component.html → angularintapp/src/app/pages/not-found/not-found.html} +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/src/app/types/conversation.ts +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/src/app/types/globals.d.ts +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/src/app/utils/async-data.ts +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/src/index.html +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/src/main.ts +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/src/styles.scss +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/src/theme.scss +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/src/types/sf-globals.d.ts +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/tsconfig.app.json +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/tsconfig.json +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/tsconfig.spec.json +0 -0
- /package/dist/force-app/main/default/uiBundles/{angularinternalapp → angularintapp}/ui-bundle.json +0 -0
|
@@ -21,11 +21,11 @@ import { MatFormFieldModule } from "@angular/material/form-field";
|
|
|
21
21
|
import { FormsModule } from "@angular/forms";
|
|
22
22
|
// Base-app UI wrapper, inherited (not recreated) by this feature. Post-compose
|
|
23
23
|
// it lands at uiBundles/<target>/src/app/components/ui/input/..., three levels up.
|
|
24
|
-
import { InputComponent } from "
|
|
25
|
-
import { ObjectSearchStateService } from "
|
|
26
|
-
import { FILTER_DEBOUNCE_MS } from "
|
|
27
|
-
import type { FilterFieldConfig } from "
|
|
28
|
-
import { FilterFieldWrapperComponent } from "
|
|
24
|
+
import { InputComponent } from "../../../components/ui/input/input";
|
|
25
|
+
import { ObjectSearchStateService } from "../object-search-state.service";
|
|
26
|
+
import { FILTER_DEBOUNCE_MS } from "../utils/debounce";
|
|
27
|
+
import type { FilterFieldConfig } from "../utils/filter-utils";
|
|
28
|
+
import { FilterFieldWrapperComponent } from "./filter-field-wrapper";
|
|
29
29
|
|
|
30
30
|
/**
|
|
31
31
|
* Numeric range filter — paired `min` / `max` inputs whose committed values are
|
|
@@ -47,7 +47,7 @@ import { FilterFieldWrapperComponent } from "../filter-field-wrapper/filter-fiel
|
|
|
47
47
|
MatFormFieldModule,
|
|
48
48
|
MatInputModule,
|
|
49
49
|
],
|
|
50
|
-
templateUrl: "./numeric-range-filter.
|
|
50
|
+
templateUrl: "./numeric-range-filter.html",
|
|
51
51
|
})
|
|
52
52
|
export class NumericRangeFilterComponent {
|
|
53
53
|
private readonly state = inject(ObjectSearchStateService);
|
|
@@ -17,11 +17,11 @@ import { Subject } from "rxjs";
|
|
|
17
17
|
import { debounceTime } from "rxjs/operators";
|
|
18
18
|
// Base-app UI wrapper, inherited (not recreated) by this feature. Post-compose
|
|
19
19
|
// it lands at uiBundles/<target>/src/app/components/ui/input/..., three levels up.
|
|
20
|
-
import { InputComponent } from "
|
|
21
|
-
import { ObjectSearchStateService } from "
|
|
22
|
-
import { FILTER_DEBOUNCE_MS } from "
|
|
23
|
-
import type { FilterFieldConfig } from "
|
|
24
|
-
import { FilterFieldWrapperComponent } from "
|
|
20
|
+
import { InputComponent } from "../../../components/ui/input/input";
|
|
21
|
+
import { ObjectSearchStateService } from "../object-search-state.service";
|
|
22
|
+
import { FILTER_DEBOUNCE_MS } from "../utils/debounce";
|
|
23
|
+
import type { FilterFieldConfig } from "../utils/filter-utils";
|
|
24
|
+
import { FilterFieldWrapperComponent } from "./filter-field-wrapper";
|
|
25
25
|
|
|
26
26
|
/**
|
|
27
27
|
* Multi-field search filter — a debounced input whose value is applied via
|
|
@@ -35,7 +35,7 @@ import { FilterFieldWrapperComponent } from "../filter-field-wrapper/filter-fiel
|
|
|
35
35
|
selector: "app-search-filter",
|
|
36
36
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
37
37
|
imports: [InputComponent, FilterFieldWrapperComponent],
|
|
38
|
-
templateUrl: "./search-filter.
|
|
38
|
+
templateUrl: "./search-filter.html",
|
|
39
39
|
})
|
|
40
40
|
export class SearchFilterComponent {
|
|
41
41
|
private readonly state = inject(ObjectSearchStateService);
|
|
@@ -9,10 +9,10 @@ import { ChangeDetectionStrategy, Component, computed, inject, input } from "@an
|
|
|
9
9
|
import {
|
|
10
10
|
SelectComponent,
|
|
11
11
|
type AppSelectOption,
|
|
12
|
-
} from "
|
|
13
|
-
import { ObjectSearchStateService } from "
|
|
14
|
-
import type { FilterFieldConfig } from "
|
|
15
|
-
import { FilterFieldWrapperComponent } from "
|
|
12
|
+
} from "../../../components/ui/select/select";
|
|
13
|
+
import { ObjectSearchStateService } from "../object-search-state.service";
|
|
14
|
+
import type { FilterFieldConfig } from "../utils/filter-utils";
|
|
15
|
+
import { FilterFieldWrapperComponent } from "./filter-field-wrapper";
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
18
|
* Single-value picklist filter — a select rendered from `config.options` with
|
|
@@ -27,7 +27,7 @@ const ALL_VALUE = "";
|
|
|
27
27
|
selector: "app-select-filter",
|
|
28
28
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
29
29
|
imports: [SelectComponent, FilterFieldWrapperComponent],
|
|
30
|
-
templateUrl: "./select-filter.
|
|
30
|
+
templateUrl: "./select-filter.html",
|
|
31
31
|
})
|
|
32
32
|
export class SelectFilterComponent {
|
|
33
33
|
private readonly state = inject(ObjectSearchStateService);
|
|
@@ -17,11 +17,11 @@ import { Subject } from "rxjs";
|
|
|
17
17
|
import { debounceTime } from "rxjs/operators";
|
|
18
18
|
// Base-app UI wrapper, inherited (not recreated) by this feature. Post-compose
|
|
19
19
|
// it lands at uiBundles/<target>/src/app/components/ui/input/..., three levels up.
|
|
20
|
-
import { InputComponent } from "
|
|
21
|
-
import { ObjectSearchStateService } from "
|
|
22
|
-
import { FILTER_DEBOUNCE_MS } from "
|
|
23
|
-
import type { FilterFieldConfig } from "
|
|
24
|
-
import { FilterFieldWrapperComponent } from "
|
|
20
|
+
import { InputComponent } from "../../../components/ui/input/input";
|
|
21
|
+
import { ObjectSearchStateService } from "../object-search-state.service";
|
|
22
|
+
import { FILTER_DEBOUNCE_MS } from "../utils/debounce";
|
|
23
|
+
import type { FilterFieldConfig } from "../utils/filter-utils";
|
|
24
|
+
import { FilterFieldWrapperComponent } from "./filter-field-wrapper";
|
|
25
25
|
|
|
26
26
|
/**
|
|
27
27
|
* Text filter — free-text input that writes a `like %value%` clause via
|
|
@@ -36,7 +36,7 @@ import { FilterFieldWrapperComponent } from "../filter-field-wrapper/filter-fiel
|
|
|
36
36
|
selector: "app-text-filter",
|
|
37
37
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
38
38
|
imports: [InputComponent, FilterFieldWrapperComponent],
|
|
39
|
-
templateUrl: "./text-filter.
|
|
39
|
+
templateUrl: "./text-filter.html",
|
|
40
40
|
})
|
|
41
41
|
export class TextFilterComponent {
|
|
42
42
|
private readonly state = inject(ObjectSearchStateService);
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { ChangeDetectionStrategy, Component, inject, input } from "@angular/core";
|
|
7
7
|
import type { PageEvent } from "@angular/material/paginator";
|
|
8
|
-
import { PaginatorComponent } from "
|
|
9
|
-
import { ObjectSearchStateService } from "
|
|
8
|
+
import { PaginatorComponent } from "../../../components/ui/paginator/paginator";
|
|
9
|
+
import { ObjectSearchStateService } from "../object-search-state.service";
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* Cursor-pagination bridge. Feeds the shared cursor state into the presentational
|
|
@@ -23,7 +23,7 @@ import { ObjectSearchStateService } from "../../object-search-state.service";
|
|
|
23
23
|
selector: "app-pagination-controls",
|
|
24
24
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
25
25
|
imports: [PaginatorComponent],
|
|
26
|
-
templateUrl: "./pagination
|
|
26
|
+
templateUrl: "./pagination.html",
|
|
27
27
|
})
|
|
28
28
|
export class PaginationControlsComponent {
|
|
29
29
|
/** Total row count from the latest fetch; drives the paginator's range label. */
|
|
@@ -45,11 +45,11 @@
|
|
|
45
45
|
</svg>
|
|
46
46
|
<span>Filters</span>
|
|
47
47
|
@if (nonSearchFilterCount() > 0) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
48
|
+
<span
|
|
49
|
+
class="inline-flex items-center justify-center h-5 min-w-5 rounded-full bg-primary text-primary-foreground text-xs px-1"
|
|
50
|
+
>
|
|
51
|
+
{{ nonSearchFilterCount() }}
|
|
52
|
+
</span>
|
|
53
53
|
}
|
|
54
54
|
</app-button>
|
|
55
55
|
<div class="p-3 min-w-72 max-w-96 space-y-3">
|
|
@@ -15,11 +15,11 @@ import {
|
|
|
15
15
|
} from "@angular/core";
|
|
16
16
|
import { takeUntilDestroyed, toObservable } from "@angular/core/rxjs-interop";
|
|
17
17
|
import { debounceTime } from "rxjs/operators";
|
|
18
|
-
import { ButtonComponent } from "
|
|
19
|
-
import { InputComponent } from "
|
|
20
|
-
import { PopoverComponent } from "
|
|
21
|
-
import { ObjectSearchStateService } from "
|
|
22
|
-
import type { FilterFieldConfig } from "
|
|
18
|
+
import { ButtonComponent } from "../../../components/ui/button/button";
|
|
19
|
+
import { InputComponent } from "../../../components/ui/input/input";
|
|
20
|
+
import { PopoverComponent } from "../../../components/ui/popover/popover";
|
|
21
|
+
import { ObjectSearchStateService } from "../object-search-state.service";
|
|
22
|
+
import type { FilterFieldConfig } from "../utils/filter-utils";
|
|
23
23
|
|
|
24
24
|
/** How long to wait after the last keystroke before writing to state. */
|
|
25
25
|
const SEARCH_DEBOUNCE_MS = 300;
|
|
@@ -48,7 +48,7 @@ const SEARCH_DEBOUNCE_MS = 300;
|
|
|
48
48
|
selector: "app-search-bar",
|
|
49
49
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
50
50
|
imports: [ButtonComponent, InputComponent, PopoverComponent],
|
|
51
|
-
templateUrl: "./search-bar.
|
|
51
|
+
templateUrl: "./search-bar.html",
|
|
52
52
|
})
|
|
53
53
|
export class SearchBarComponent implements OnInit {
|
|
54
54
|
/** Config for the multi-field search filter (its label, placeholder, etc.). */
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
<div class="flex items-center gap-2">
|
|
2
|
+
<span class="text-sm text-muted-foreground whitespace-nowrap">{{ label() }}</span>
|
|
3
|
+
<app-select
|
|
4
|
+
class="w-[160px]"
|
|
5
|
+
[options]="options()"
|
|
6
|
+
[value]="selectedValue()"
|
|
7
|
+
(valueChange)="onFieldChange($event)"
|
|
8
|
+
placeholder="Default"
|
|
9
|
+
/>
|
|
10
|
+
@if (sort(); as active) {
|
|
11
|
+
<app-button
|
|
12
|
+
appearance="text"
|
|
13
|
+
size="icon-sm"
|
|
14
|
+
[attr.aria-label]="'Sort ' + (active.direction === 'ASC' ? 'descending' : 'ascending')"
|
|
15
|
+
(clicked)="toggleDirection()"
|
|
16
|
+
>
|
|
17
|
+
@if (active.direction === "ASC") {
|
|
18
|
+
<svg
|
|
19
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
20
|
+
class="h-4 w-4"
|
|
21
|
+
viewBox="0 0 24 24"
|
|
22
|
+
fill="none"
|
|
23
|
+
stroke="currentColor"
|
|
24
|
+
stroke-width="2"
|
|
25
|
+
stroke-linecap="round"
|
|
26
|
+
stroke-linejoin="round"
|
|
27
|
+
aria-hidden="true"
|
|
28
|
+
>
|
|
29
|
+
<path d="m5 12 7-7 7 7" />
|
|
30
|
+
<path d="M12 19V5" />
|
|
31
|
+
</svg>
|
|
32
|
+
} @else {
|
|
33
|
+
<svg
|
|
34
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
35
|
+
class="h-4 w-4"
|
|
36
|
+
viewBox="0 0 24 24"
|
|
37
|
+
fill="none"
|
|
38
|
+
stroke="currentColor"
|
|
39
|
+
stroke-width="2"
|
|
40
|
+
stroke-linecap="round"
|
|
41
|
+
stroke-linejoin="round"
|
|
42
|
+
aria-hidden="true"
|
|
43
|
+
>
|
|
44
|
+
<path d="M12 5v14" />
|
|
45
|
+
<path d="m19 12-7 7-7-7" />
|
|
46
|
+
</svg>
|
|
47
|
+
}
|
|
48
|
+
</app-button>
|
|
49
|
+
}
|
|
50
|
+
</div>
|
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
* For full license text, see the LICENSE.txt file
|
|
5
5
|
*/
|
|
6
6
|
import { ChangeDetectionStrategy, Component, computed, inject, input } from "@angular/core";
|
|
7
|
-
import { ButtonComponent } from "
|
|
7
|
+
import { ButtonComponent } from "../../../components/ui/button/button";
|
|
8
8
|
import {
|
|
9
9
|
SelectComponent,
|
|
10
10
|
type AppSelectOption,
|
|
11
|
-
} from "
|
|
12
|
-
import { ObjectSearchStateService } from "
|
|
13
|
-
import type { SortFieldConfig, SortState } from "
|
|
11
|
+
} from "../../../components/ui/select/select";
|
|
12
|
+
import { ObjectSearchStateService } from "../object-search-state.service";
|
|
13
|
+
import type { SortFieldConfig, SortState } from "../utils/sort-utils";
|
|
14
14
|
|
|
15
15
|
/** Sentinel value used in the select to represent "no sort". */
|
|
16
16
|
const NONE_VALUE = "__none__";
|
|
@@ -27,7 +27,7 @@ const NONE_VALUE = "__none__";
|
|
|
27
27
|
selector: "app-sort-control",
|
|
28
28
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
29
29
|
imports: [ButtonComponent, SelectComponent],
|
|
30
|
-
templateUrl: "./sort-control.
|
|
30
|
+
templateUrl: "./sort-control.html",
|
|
31
31
|
})
|
|
32
32
|
export class SortControlComponent {
|
|
33
33
|
/** Sortable fields to expose in the select. */
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
<div class="max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 py-6" [attr.aria-busy]="loading()">
|
|
2
|
+
<app-object-breadcrumb
|
|
3
|
+
listPath="/accounts"
|
|
4
|
+
listLabel="Accounts"
|
|
5
|
+
[loading]="loading()"
|
|
6
|
+
[recordName]="recordName()"
|
|
7
|
+
/>
|
|
8
|
+
|
|
9
|
+
@if (loading()) {
|
|
10
|
+
<!-- Loading state -->
|
|
11
|
+
<app-skeleton class="h-8 w-56 mb-4" />
|
|
12
|
+
<app-card>
|
|
13
|
+
<app-card-content class="space-y-8">
|
|
14
|
+
<div class="space-y-4">
|
|
15
|
+
@for (row of skeletonRows; track row) {
|
|
16
|
+
<div class="grid grid-cols-2 gap-x-8 gap-y-4">
|
|
17
|
+
<div>
|
|
18
|
+
<app-skeleton class="h-4 w-24 mb-1.5" />
|
|
19
|
+
<app-skeleton class="h-5 w-40" />
|
|
20
|
+
</div>
|
|
21
|
+
<div>
|
|
22
|
+
<app-skeleton class="h-4 w-24 mb-1.5" />
|
|
23
|
+
<app-skeleton class="h-5 w-40" />
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
26
|
+
}
|
|
27
|
+
</div>
|
|
28
|
+
<app-separator />
|
|
29
|
+
<div class="space-y-4">
|
|
30
|
+
<app-skeleton class="h-7 w-48 py-2" />
|
|
31
|
+
<div class="grid grid-cols-2 gap-x-8 gap-y-4">
|
|
32
|
+
<app-skeleton class="h-12 w-full" />
|
|
33
|
+
<app-skeleton class="h-12 w-full" />
|
|
34
|
+
</div>
|
|
35
|
+
</div>
|
|
36
|
+
</app-card-content>
|
|
37
|
+
</app-card>
|
|
38
|
+
} @else if (error()) {
|
|
39
|
+
<!-- Error state -->
|
|
40
|
+
<app-alert
|
|
41
|
+
variant="destructive"
|
|
42
|
+
icon="error"
|
|
43
|
+
title="Failed to load account"
|
|
44
|
+
description="Something went wrong while loading this account. Please try again later."
|
|
45
|
+
/>
|
|
46
|
+
<div class="mt-4 flex gap-3">
|
|
47
|
+
<app-button appearance="outlined" (clicked)="goBack()">← Back</app-button>
|
|
48
|
+
<app-button appearance="outlined" (clicked)="reload()">Retry</app-button>
|
|
49
|
+
</div>
|
|
50
|
+
} @else if (notFound()) {
|
|
51
|
+
<!-- Not found state -->
|
|
52
|
+
<app-card>
|
|
53
|
+
<app-card-content class="flex flex-col items-center justify-center py-16 text-center">
|
|
54
|
+
<svg
|
|
55
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
56
|
+
class="size-12 text-muted-foreground mb-4"
|
|
57
|
+
viewBox="0 0 24 24"
|
|
58
|
+
fill="none"
|
|
59
|
+
stroke="currentColor"
|
|
60
|
+
stroke-width="2"
|
|
61
|
+
stroke-linecap="round"
|
|
62
|
+
stroke-linejoin="round"
|
|
63
|
+
aria-hidden="true"
|
|
64
|
+
>
|
|
65
|
+
<path d="M12 17h.01" />
|
|
66
|
+
<path d="M10.1 9a2.4 2.4 0 0 1 3.9 1.9c0 1.5-2 2-2 3" />
|
|
67
|
+
<path d="M14.5 4.5 20 10l-2 2" />
|
|
68
|
+
<path d="M4 4h9l7 7v9a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1Z" />
|
|
69
|
+
</svg>
|
|
70
|
+
<h2 class="text-lg font-semibold mb-1">Account not found</h2>
|
|
71
|
+
<p class="text-sm text-muted-foreground mb-6">
|
|
72
|
+
The account you're looking for doesn't exist or may have been deleted.
|
|
73
|
+
</p>
|
|
74
|
+
<app-button appearance="outlined" (clicked)="goBack()">← Go back</app-button>
|
|
75
|
+
</app-card-content>
|
|
76
|
+
</app-card>
|
|
77
|
+
} @else if (account()) {
|
|
78
|
+
<!-- Content -->
|
|
79
|
+
<h1 class="text-2xl font-bold mb-4">Account: {{ title() }}</h1>
|
|
80
|
+
|
|
81
|
+
<app-card>
|
|
82
|
+
<app-card-content class="space-y-8">
|
|
83
|
+
<!-- Top section -->
|
|
84
|
+
<div class="space-y-4">
|
|
85
|
+
@for (row of topRows(); track $index) {
|
|
86
|
+
<div class="grid grid-cols-2 gap-x-8 gap-y-4">
|
|
87
|
+
@for (field of row; track field.label) {
|
|
88
|
+
<div>
|
|
89
|
+
<dt class="text-sm text-muted-foreground">{{ field.label }}</dt>
|
|
90
|
+
<dd class="mt-0.5">
|
|
91
|
+
@if (field.value && field.telephone) {
|
|
92
|
+
<a [href]="'tel:' + field.value" class="underline">{{ field.value }}</a>
|
|
93
|
+
} @else { {{ field.value ?? "—" }} }
|
|
94
|
+
</dd>
|
|
95
|
+
</div>
|
|
96
|
+
}
|
|
97
|
+
</div>
|
|
98
|
+
}
|
|
99
|
+
</div>
|
|
100
|
+
|
|
101
|
+
<app-separator />
|
|
102
|
+
|
|
103
|
+
<!-- Additional Information -->
|
|
104
|
+
<app-collapsible title="Additional Information" [(open)]="additionalOpen">
|
|
105
|
+
<div class="space-y-4">
|
|
106
|
+
@for (row of additionalRows(); track $index) {
|
|
107
|
+
<div class="grid grid-cols-2 gap-x-8 gap-y-4">
|
|
108
|
+
@for (field of row; track field.label) {
|
|
109
|
+
<div>
|
|
110
|
+
<dt class="text-sm text-muted-foreground">{{ field.label }}</dt>
|
|
111
|
+
<dd class="mt-0.5">{{ field.value ?? "—" }}</dd>
|
|
112
|
+
</div>
|
|
113
|
+
}
|
|
114
|
+
</div>
|
|
115
|
+
}
|
|
116
|
+
<div>
|
|
117
|
+
<dt class="text-sm text-muted-foreground">Description</dt>
|
|
118
|
+
<dd class="mt-0.5">{{ description() ?? "—" }}</dd>
|
|
119
|
+
</div>
|
|
120
|
+
</div>
|
|
121
|
+
</app-collapsible>
|
|
122
|
+
<div class="space-y-4"></div>
|
|
123
|
+
<app-separator />
|
|
124
|
+
|
|
125
|
+
<!-- Address Information -->
|
|
126
|
+
<app-collapsible title="Address Information" [(open)]="addressOpen">
|
|
127
|
+
<div class="grid grid-cols-2 gap-x-8 gap-y-4">
|
|
128
|
+
<div>
|
|
129
|
+
<dt class="text-sm text-muted-foreground">Billing Address</dt>
|
|
130
|
+
<dd class="mt-0.5">
|
|
131
|
+
@if (billingAddress()) { @for (line of billingAddress(); track $index) {
|
|
132
|
+
<div>{{ line }}</div>
|
|
133
|
+
} } @else { — }
|
|
134
|
+
</dd>
|
|
135
|
+
</div>
|
|
136
|
+
<div>
|
|
137
|
+
<dt class="text-sm text-muted-foreground">Shipping Address</dt>
|
|
138
|
+
<dd class="mt-0.5">
|
|
139
|
+
@if (shippingAddress()) { @for (line of shippingAddress(); track $index) {
|
|
140
|
+
<div>{{ line }}</div>
|
|
141
|
+
} } @else { — }
|
|
142
|
+
</dd>
|
|
143
|
+
</div>
|
|
144
|
+
</div>
|
|
145
|
+
</app-collapsible>
|
|
146
|
+
<div class="space-y-4"></div>
|
|
147
|
+
<app-separator />
|
|
148
|
+
<!-- System Information -->
|
|
149
|
+
<app-collapsible title="System Information" [(open)]="systemOpen">
|
|
150
|
+
<div class="grid grid-cols-2 gap-x-8 gap-y-4">
|
|
151
|
+
<div>
|
|
152
|
+
<dt class="text-sm text-muted-foreground">Created By</dt>
|
|
153
|
+
<dd class="mt-0.5">{{ createdBy() ?? "—" }}</dd>
|
|
154
|
+
</div>
|
|
155
|
+
<div>
|
|
156
|
+
<dt class="text-sm text-muted-foreground">Last Modified By</dt>
|
|
157
|
+
<dd class="mt-0.5">{{ lastModifiedBy() ?? "—" }}</dd>
|
|
158
|
+
</div>
|
|
159
|
+
</div>
|
|
160
|
+
</app-collapsible>
|
|
161
|
+
</app-card-content>
|
|
162
|
+
</app-card>
|
|
163
|
+
}
|
|
164
|
+
</div>
|
|
@@ -10,17 +10,14 @@ import { map } from "rxjs/operators";
|
|
|
10
10
|
// Base-app UI wrappers, inherited (not recreated) by this feature. Post-compose
|
|
11
11
|
// they land at uiBundles/<target>/src/app/components/ui/..., three levels up from this
|
|
12
12
|
// page folder (app/features/account-search/ -> app/components/ui/).
|
|
13
|
-
import { AlertComponent } from "../../components/ui/alert/alert
|
|
14
|
-
import { ButtonComponent } from "../../components/ui/button/button
|
|
15
|
-
import {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
} from "../../components/ui/
|
|
19
|
-
import { CollapsibleComponent } from "../../components/ui/collapsible/collapsible.component";
|
|
20
|
-
import { SeparatorComponent } from "../../components/ui/separator/separator.component";
|
|
21
|
-
import { SkeletonComponent } from "../../components/ui/skeleton/skeleton.component";
|
|
13
|
+
import { AlertComponent } from "../../components/ui/alert/alert";
|
|
14
|
+
import { ButtonComponent } from "../../components/ui/button/button";
|
|
15
|
+
import { CardComponent, CardContentComponent } from "../../components/ui/card/card";
|
|
16
|
+
import { CollapsibleComponent } from "../../components/ui/collapsible/collapsible";
|
|
17
|
+
import { SeparatorComponent } from "../../components/ui/separator/separator";
|
|
18
|
+
import { SkeletonComponent } from "../../components/ui/skeleton/skeleton";
|
|
22
19
|
// Object-search feature building blocks (Waves 1-2), two levels up.
|
|
23
|
-
import { ObjectBreadcrumbComponent } from "../../features/object-search/
|
|
20
|
+
import { ObjectBreadcrumbComponent } from "../../features/object-search/breadcrumb/breadcrumb";
|
|
24
21
|
import { createAsyncData } from "../../utils/async-data";
|
|
25
22
|
import {
|
|
26
23
|
fieldValue,
|
|
@@ -66,8 +63,8 @@ interface Field {
|
|
|
66
63
|
SkeletonComponent,
|
|
67
64
|
ObjectBreadcrumbComponent,
|
|
68
65
|
],
|
|
69
|
-
templateUrl: "./account-detail-page.
|
|
70
|
-
styleUrl: "./account-detail-page.
|
|
66
|
+
templateUrl: "./account-detail-page.html",
|
|
67
|
+
styleUrl: "./account-detail-page.scss",
|
|
71
68
|
})
|
|
72
69
|
export class AccountDetailPageComponent {
|
|
73
70
|
private readonly service = inject(AccountSearchService);
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
<div class="max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 py-6">
|
|
2
|
+
<app-object-breadcrumb listPath="/accounts" listLabel="Accounts" />
|
|
3
|
+
|
|
4
|
+
<h1 class="text-2xl font-bold mb-4">Search Accounts</h1>
|
|
5
|
+
|
|
6
|
+
<div class="flex flex-col lg:flex-row gap-6">
|
|
7
|
+
<!-- Sidebar — Filter Panel -->
|
|
8
|
+
<aside class="w-full lg:w-80 shrink-0">
|
|
9
|
+
<app-collapsible title="Filters" [(open)]="filtersOpen">
|
|
10
|
+
<div class="space-y-1">
|
|
11
|
+
<app-search-filter [config]="searchConfig" />
|
|
12
|
+
<app-text-filter [config]="nameConfig" />
|
|
13
|
+
<app-select-filter [config]="industryConfig()" />
|
|
14
|
+
<app-multi-select-filter [config]="typeConfig()" />
|
|
15
|
+
<app-numeric-range-filter [config]="revenueConfig" />
|
|
16
|
+
<app-date-filter [config]="createdConfig" filterType="datetime" />
|
|
17
|
+
<app-date-range-filter [config]="lastModifiedConfig" filterType="datetimerange" />
|
|
18
|
+
</div>
|
|
19
|
+
</app-collapsible>
|
|
20
|
+
</aside>
|
|
21
|
+
|
|
22
|
+
<!-- Main area — Sort + Results -->
|
|
23
|
+
<div class="flex-1 min-w-0">
|
|
24
|
+
<div class="flex flex-wrap items-center gap-2 mb-4">
|
|
25
|
+
<app-sort-control [sortFields]="sortConfigs" />
|
|
26
|
+
<app-active-filters />
|
|
27
|
+
</div>
|
|
28
|
+
|
|
29
|
+
<div class="min-h-132" [attr.aria-busy]="loading()">
|
|
30
|
+
@if (loading()) {
|
|
31
|
+
<app-skeleton class="h-5 w-30 mb-3" />
|
|
32
|
+
<div class="divide-y">
|
|
33
|
+
@for (row of skeletonRows(); track row) {
|
|
34
|
+
<div class="flex items-center justify-between py-3">
|
|
35
|
+
<div class="space-y-2">
|
|
36
|
+
<app-skeleton class="h-5 w-40" />
|
|
37
|
+
<app-skeleton class="h-4 w-28" />
|
|
38
|
+
</div>
|
|
39
|
+
<div class="space-y-2 flex flex-col items-end">
|
|
40
|
+
<app-skeleton class="h-4 w-24" />
|
|
41
|
+
<app-skeleton class="h-4 w-20" />
|
|
42
|
+
</div>
|
|
43
|
+
</div>
|
|
44
|
+
}
|
|
45
|
+
</div>
|
|
46
|
+
} @else if (error()) {
|
|
47
|
+
<p class="text-sm text-muted-foreground mb-3">0 accounts found</p>
|
|
48
|
+
<app-alert
|
|
49
|
+
variant="destructive"
|
|
50
|
+
icon="error"
|
|
51
|
+
title="Failed to load accounts"
|
|
52
|
+
description="Something went wrong while loading accounts. Please try again later."
|
|
53
|
+
/>
|
|
54
|
+
} @else if (nodes().length > 0) {
|
|
55
|
+
<p class="text-sm text-muted-foreground mb-3">{{ resultCountLabel() }}</p>
|
|
56
|
+
<ul class="divide-y">
|
|
57
|
+
@for (node of nodes(); track node.Id) {
|
|
58
|
+
<li>
|
|
59
|
+
<a
|
|
60
|
+
[routerLink]="['/accounts', node.Id]"
|
|
61
|
+
class="flex items-center justify-between py-3 px-3 -mx-3 rounded-md transition-colors hover:bg-accent"
|
|
62
|
+
>
|
|
63
|
+
<div>
|
|
64
|
+
<span class="font-medium">{{ name(node) }}</span>
|
|
65
|
+
<p class="text-sm text-muted-foreground">{{ secondaryLine(node) }}</p>
|
|
66
|
+
</div>
|
|
67
|
+
<div class="text-right text-sm">
|
|
68
|
+
<p>{{ phone(node) }}</p>
|
|
69
|
+
<p class="text-muted-foreground">{{ ownerName(node) }}</p>
|
|
70
|
+
</div>
|
|
71
|
+
</a>
|
|
72
|
+
</li>
|
|
73
|
+
}
|
|
74
|
+
</ul>
|
|
75
|
+
} @else {
|
|
76
|
+
<div class="flex flex-col items-center justify-center py-16 text-center">
|
|
77
|
+
<svg
|
|
78
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
79
|
+
class="size-12 text-muted-foreground mb-4"
|
|
80
|
+
viewBox="0 0 24 24"
|
|
81
|
+
fill="none"
|
|
82
|
+
stroke="currentColor"
|
|
83
|
+
stroke-width="2"
|
|
84
|
+
stroke-linecap="round"
|
|
85
|
+
stroke-linejoin="round"
|
|
86
|
+
aria-hidden="true"
|
|
87
|
+
>
|
|
88
|
+
<path d="m13.5 8.5-5 5" />
|
|
89
|
+
<path d="m8.5 8.5 5 5" />
|
|
90
|
+
<circle cx="11" cy="11" r="8" />
|
|
91
|
+
<path d="m21 21-4.3-4.3" />
|
|
92
|
+
</svg>
|
|
93
|
+
<h2 class="text-lg font-semibold mb-1">No accounts found</h2>
|
|
94
|
+
<p class="text-sm text-muted-foreground">
|
|
95
|
+
Try adjusting your filters or search criteria.
|
|
96
|
+
</p>
|
|
97
|
+
</div>
|
|
98
|
+
}
|
|
99
|
+
</div>
|
|
100
|
+
|
|
101
|
+
<!-- Pagination — always visible, disabled while loading or on error -->
|
|
102
|
+
<app-pagination-controls
|
|
103
|
+
[totalCount]="totalCount()"
|
|
104
|
+
[hasNextPage]="hasNextPage()"
|
|
105
|
+
[endCursor]="endCursor()"
|
|
106
|
+
[pageSizeOptions]="pageSizeOptions"
|
|
107
|
+
[disabled]="controlsDisabled()"
|
|
108
|
+
/>
|
|
109
|
+
</div>
|
|
110
|
+
</div>
|
|
111
|
+
</div>
|
|
@@ -8,21 +8,21 @@ import { RouterLink } from "@angular/router";
|
|
|
8
8
|
// Base-app UI wrappers, inherited (not recreated) by this feature. Post-compose
|
|
9
9
|
// they land at uiBundles/<target>/src/app/components/ui/..., three levels up from this
|
|
10
10
|
// page folder (app/features/account-search/ -> app/components/ui/).
|
|
11
|
-
import { AlertComponent } from "../../components/ui/alert/alert
|
|
12
|
-
import { CollapsibleComponent } from "../../components/ui/collapsible/collapsible
|
|
13
|
-
import { SkeletonComponent } from "../../components/ui/skeleton/skeleton
|
|
11
|
+
import { AlertComponent } from "../../components/ui/alert/alert";
|
|
12
|
+
import { CollapsibleComponent } from "../../components/ui/collapsible/collapsible";
|
|
13
|
+
import { SkeletonComponent } from "../../components/ui/skeleton/skeleton";
|
|
14
14
|
// Object-search feature building blocks (Waves 1-2), two levels up.
|
|
15
|
-
import { ObjectBreadcrumbComponent } from "../../features/object-search/
|
|
16
|
-
import { SortControlComponent } from "../../features/object-search/
|
|
17
|
-
import { ActiveFiltersComponent } from "../../features/object-search/
|
|
18
|
-
import { PaginationControlsComponent } from "../../features/object-search/
|
|
19
|
-
import { SearchFilterComponent } from "../../features/object-search/
|
|
20
|
-
import { TextFilterComponent } from "../../features/object-search/
|
|
21
|
-
import { SelectFilterComponent } from "../../features/object-search/
|
|
22
|
-
import { MultiSelectFilterComponent } from "../../features/object-search/
|
|
23
|
-
import { NumericRangeFilterComponent } from "../../features/object-search/
|
|
24
|
-
import { DateFilterComponent } from "../../features/object-search/
|
|
25
|
-
import { DateRangeFilterComponent } from "../../features/object-search/
|
|
15
|
+
import { ObjectBreadcrumbComponent } from "../../features/object-search/breadcrumb/breadcrumb";
|
|
16
|
+
import { SortControlComponent } from "../../features/object-search/sort-control/sort-control";
|
|
17
|
+
import { ActiveFiltersComponent } from "../../features/object-search/filters/active-filters";
|
|
18
|
+
import { PaginationControlsComponent } from "../../features/object-search/pagination/pagination";
|
|
19
|
+
import { SearchFilterComponent } from "../../features/object-search/filters/search-filter";
|
|
20
|
+
import { TextFilterComponent } from "../../features/object-search/filters/text-filter";
|
|
21
|
+
import { SelectFilterComponent } from "../../features/object-search/filters/select-filter";
|
|
22
|
+
import { MultiSelectFilterComponent } from "../../features/object-search/filters/multi-select-filter";
|
|
23
|
+
import { NumericRangeFilterComponent } from "../../features/object-search/filters/numeric-range-filter";
|
|
24
|
+
import { DateFilterComponent } from "../../features/object-search/filters/date-filter";
|
|
25
|
+
import { DateRangeFilterComponent } from "../../features/object-search/filters/date-range-filter";
|
|
26
26
|
import {
|
|
27
27
|
ObjectSearchStateService,
|
|
28
28
|
type PaginationConfig,
|
|
@@ -109,7 +109,7 @@ const ACCOUNT_SORT_CONFIGS: SortFieldConfig[] = [
|
|
|
109
109
|
DateFilterComponent,
|
|
110
110
|
DateRangeFilterComponent,
|
|
111
111
|
],
|
|
112
|
-
templateUrl: "./account-search-page.
|
|
112
|
+
templateUrl: "./account-search-page.html",
|
|
113
113
|
})
|
|
114
114
|
export class AccountSearchPageComponent {
|
|
115
115
|
private readonly service = inject(AccountSearchService);
|
|
@@ -8,8 +8,8 @@ import { Router } from "@angular/router";
|
|
|
8
8
|
// Base-app UI wrappers, inherited (not recreated) by this feature. Post-compose
|
|
9
9
|
// they land at uiBundles/<target>/src/app/components/ui/{button,input}/..., three levels
|
|
10
10
|
// up from this page folder (app/features/account-search/ -> app/components/ui/).
|
|
11
|
-
import { ButtonComponent } from "../../components/ui/button/button
|
|
12
|
-
import { InputComponent } from "../../components/ui/input/input
|
|
11
|
+
import { ButtonComponent } from "../../components/ui/button/button";
|
|
12
|
+
import { InputComponent } from "../../components/ui/input/input";
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* Account-search landing page. Mirrors the React `Home` page: a single search
|
|
@@ -24,7 +24,7 @@ import { InputComponent } from "../../components/ui/input/input.component";
|
|
|
24
24
|
selector: "app-home-page",
|
|
25
25
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
26
26
|
imports: [ButtonComponent, InputComponent],
|
|
27
|
-
templateUrl: "./home-page.
|
|
27
|
+
templateUrl: "./home-page.html",
|
|
28
28
|
})
|
|
29
29
|
export class HomePageComponent {
|
|
30
30
|
private readonly router = inject(Router);
|