diff --git a/src/app/app.routing.ts b/src/app/app.routing.ts index 54c4863e..8e12d145 100644 --- a/src/app/app.routing.ts +++ b/src/app/app.routing.ts @@ -8,15 +8,15 @@ import { InitialDataResolver } from 'app/app.resolvers'; // tslint:disable:max-line-length export const appRoutes: Route[] = [ - // Redirect empty path to '/dashboards/project' - {path: '', pathMatch : 'full', redirectTo: 'dashboards/project'}, + // Redirect empty path to '/example' + {path: '', pathMatch : 'full', redirectTo: 'example'}, - // Redirect signed in user to the '/dashboards/project' + // Redirect signed in user to the '/example' // // After the user signs in, the sign in page will redirect the user to the 'signed-in-redirect' // path. Below is another redirection for that path to redirect the user to the desired // location. This is a small convenience to keep all main routes together here on this file. - {path: 'signed-in-redirect', pathMatch : 'full', redirectTo: 'dashboards/project'}, + {path: 'signed-in-redirect', pathMatch : 'full', redirectTo: 'example'}, // Auth routes for guests { @@ -73,119 +73,7 @@ export const appRoutes: Route[] = [ initialData: InitialDataResolver, }, children : [ - - // Dashboards - {path: 'dashboards', children: [ - {path: 'project', loadChildren: () => import('app/modules/admin/dashboards/project/project.module').then(m => m.ProjectModule)}, - {path: 'analytics', loadChildren: () => import('app/modules/admin/dashboards/analytics/analytics.module').then(m => m.AnalyticsModule)}, - ]}, - - // Apps - {path: 'apps', children: [ - {path: 'calendar', loadChildren: () => import('app/modules/admin/apps/calendar/calendar.module').then(m => m.CalendarModule)}, - {path: 'contacts', loadChildren: () => import('app/modules/admin/apps/contacts/contacts.module').then(m => m.ContactsModule)}, - {path: 'ecommerce', loadChildren: () => import('app/modules/admin/apps/ecommerce/ecommerce.module').then(m => m.ECommerceModule)}, - {path: 'file-manager', loadChildren: () => import('app/modules/admin/apps/file-manager/file-manager.module').then(m => m.FileManagerModule)}, - {path: 'help-center', loadChildren: () => import('app/modules/admin/apps/help-center/help-center.module').then(m => m.HelpCenterModule)}, - {path: 'mailbox', loadChildren: () => import('app/modules/admin/apps/mailbox/mailbox.module').then(m => m.MailboxModule)}, - {path: 'tasks', loadChildren: () => import('app/modules/admin/apps/tasks/tasks.module').then(m => m.TasksModule)}, - ]}, - - // Pages - {path: 'pages', children: [ - - // Authentication - {path: 'authentication', loadChildren: () => import('app/modules/admin/pages/authentication/authentication.module').then(m => m.AuthenticationModule)}, - - // Coming soon - {path: 'coming-soon', loadChildren: () => import('app/modules/admin/pages/coming-soon/coming-soon.module').then(m => m.ComingSoonModule)}, - - // Error - {path: 'error', children: [ - {path: '404', loadChildren: () => import('app/modules/admin/pages/error/error-404/error-404.module').then(m => m.Error404Module)}, - {path: '500', loadChildren: () => import('app/modules/admin/pages/error/error-500/error-500.module').then(m => m.Error500Module)} - ]}, - - // Invoice - {path: 'invoice', children: [ - {path: 'printable', children: [ - {path: 'compact', loadChildren: () => import('app/modules/admin/pages/invoice/printable/compact/compact.module').then(m => m.CompactModule)}, - {path: 'modern', loadChildren: () => import('app/modules/admin/pages/invoice/printable/modern/modern.module').then(m => m.ModernModule)} - ]} - ]}, - - // Maintenance - {path: 'maintenance', loadChildren: () => import('app/modules/admin/pages/maintenance/maintenance.module').then(m => m.MaintenanceModule)}, - - // Pricing - {path: 'pricing', children: [ - {path: 'modern', loadChildren: () => import('app/modules/admin/pages/pricing/modern/modern.module').then(m => m.PricingModernModule)}, - {path: 'simple', loadChildren: () => import('app/modules/admin/pages/pricing/simple/simple.module').then(m => m.PricingSimpleModule)}, - {path: 'single', loadChildren: () => import('app/modules/admin/pages/pricing/single/single.module').then(m => m.PricingSingleModule)}, - {path: 'table', loadChildren: () => import('app/modules/admin/pages/pricing/table/table.module').then(m => m.PricingTableModule)} - ]}, - - // Profile - {path: 'profile', loadChildren: () => import('app/modules/admin/pages/profile/profile.module').then(m => m.ProfileModule)}, - ]}, - - // User interface - {path: 'ui', children: [ - - // Angular Material - {path: 'angular-material', loadChildren: () => import('app/modules/admin/ui/angular-material/angular-material.module').then(m => m.AngularMaterialModule)}, - - // TailwindCSS - {path: 'tailwindcss', loadChildren: () => import('app/modules/admin/ui/tailwindcss/tailwindcss.module').then(m => m.TailwindCSSModule)}, - - // Animations - {path: 'animations', loadChildren: () => import('app/modules/admin/ui/animations/animations.module').then(m => m.AnimationsModule)}, - - // Cards - {path: 'cards', loadChildren: () => import('app/modules/admin/ui/cards/cards.module').then(m => m.CardsModule)}, - - // Colors - {path: 'colors', loadChildren: () => import('app/modules/admin/ui/colors/colors.module').then(m => m.ColorsModule)}, - - // Datatable - {path: 'datatable', loadChildren: () => import('app/modules/admin/ui/datatable/datatable.module').then(m => m.DatatableModule)}, - - // Forms - {path: 'forms', children: [ - {path: 'fields', loadChildren: () => import('app/modules/admin/ui/forms/fields/fields.module').then(m => m.FormsFieldsModule)}, - {path: 'layouts', loadChildren: () => import('app/modules/admin/ui/forms/layouts/layouts.module').then(m => m.FormsLayoutsModule)}, - {path: 'wizards', loadChildren: () => import('app/modules/admin/ui/forms/wizards/wizards.module').then(m => m.FormsWizardsModule)} - ]}, - - // Icons - {path: 'icons', loadChildren: () => import('app/modules/admin/ui/icons/icons.module').then(m => m.IconsModule)}, - - // Page layouts - {path: 'page-layouts', loadChildren: () => import('app/modules/admin/ui/page-layouts/page-layouts.module').then(m => m.PageLayoutsModule)}, - - // Typography - {path: 'typography', loadChildren: () => import('app/modules/admin/ui/typography/typography.module').then(m => m.TypographyModule)} - ]}, - - // Documentation - {path: 'docs', children: [ - - // Changelog - {path: 'changelog', loadChildren: () => import('app/modules/admin/docs/changelog/changelog.module').then(m => m.ChangelogModule)}, - - // Guides - {path: 'guides', loadChildren: () => import('app/modules/admin/docs/guides/guides.module').then(m => m.GuidesModule)}, - - // Core features - {path: 'core-features', loadChildren: () => import('app/modules/admin/docs/core-features/core-features.module').then(m => m.CoreFeaturesModule)}, - - // Other components - {path: 'other-components', loadChildren: () => import('app/modules/admin/docs/other-components/other-components.module').then(m => m.OtherComponentsModule)}, - ]}, - - // 404 & Catch all - {path: '404-not-found', pathMatch: 'full', loadChildren: () => import('app/modules/admin/pages/error/error-404/error-404.module').then(m => m.Error404Module)}, - {path: '**', redirectTo: '404-not-found'} + {path: 'example', loadChildren: () => import('app/modules/admin/example/example.module').then(m => m.ExampleModule)}, ] } ]; diff --git a/src/app/mock-api/common/navigation/data.ts b/src/app/mock-api/common/navigation/data.ts index d1274e38..bdce1485 100644 --- a/src/app/mock-api/common/navigation/data.ts +++ b/src/app/mock-api/common/navigation/data.ts @@ -1,1284 +1,39 @@ - /* tslint:disable:max-line-length */ import { FuseNavigationItem } from '@fuse/components/navigation'; export const defaultNavigation: FuseNavigationItem[] = [ { - id : 'dashboards', - title : 'Dashboards', - subtitle: 'Unique dashboard designs', - type : 'group', - icon : 'heroicons_outline:home', - children: [ - { - id : 'dashboards.project', - title: 'Project', - type : 'basic', - icon : 'heroicons_outline:clipboard-check', - link : '/dashboards/project' - }, - { - id : 'dashboards.analytics', - title: 'Analytics', - type : 'basic', - icon : 'heroicons_outline:chart-pie', - link : '/dashboards/analytics' - } - ] - }, - { - id : 'apps', - title : 'Applications', - subtitle: 'Custom made application designs', - type : 'group', - icon : 'heroicons_outline:home', - children: [ - { - id : 'apps.calendar', - title : 'Calendar', - subtitle: '3 upcoming events', - type : 'basic', - icon : 'heroicons_outline:calendar', - link : '/apps/calendar' - }, - { - id : 'apps.contacts', - title: 'Contacts', - type : 'basic', - icon : 'heroicons_outline:user-group', - link : '/apps/contacts' - }, - { - id : 'apps.ecommerce', - title : 'ECommerce', - type : 'collapsable', - icon : 'heroicons_outline:shopping-cart', - children: [ - { - id : 'apps.ecommerce.inventory', - title: 'Inventory', - type : 'basic', - link : '/apps/ecommerce/inventory' - } - ] - }, - { - id : 'apps.file-manager', - title: 'File manager', - type : 'basic', - icon : 'heroicons_outline:cloud', - link : '/apps/file-manager' - }, - { - id : 'apps.help-center', - title : 'Help center', - type : 'collapsable', - icon : 'heroicons_outline:support', - link : '/apps/help-center', - children: [ - { - id : 'apps.help-center.home', - title : 'Home', - type : 'basic', - link : '/apps/help-center', - exactMatch: true - }, - { - id : 'apps.help-center.faqs', - title: 'FAQs', - type : 'basic', - link : '/apps/help-center/faqs' - }, - { - id : 'apps.help-center.guides', - title: 'Guides', - type : 'basic', - link : '/apps/help-center/guides' - }, - { - id : 'apps.help-center.support', - title: 'Support', - type : 'basic', - link : '/apps/help-center/support' - } - ] - }, - { - id : 'apps.mailbox', - title: 'Mailbox', - type : 'basic', - icon : 'heroicons_outline:mail', - link : '/apps/mailbox', - badge: { - title : '27', - classes: 'px-2 bg-pink-600 text-white rounded-full' - } - }, - { - id : 'apps.tasks', - title: 'Tasks', - type : 'basic', - icon : 'heroicons_outline:check-circle', - link : '/apps/tasks' - } - - ] - }, - { - id : 'pages', - title : 'Pages', - subtitle: 'Custom made page designs', - type : 'group', - icon : 'heroicons_outline:document', - children: [ - { - id : 'pages.authentication', - title : 'Authentication', - type : 'collapsable', - icon : 'heroicons_outline:lock-closed', - children: [ - { - id : 'pages.authentication.sign-in', - title : 'Sign in', - type : 'collapsable', - children: [ - { - id : 'pages.authentication.sign-in.classic', - title: 'Classic', - type : 'basic', - link : '/pages/authentication/sign-in/classic' - }, - { - id : 'pages.authentication.sign-in.modern', - title: 'Modern', - type : 'basic', - link : '/pages/authentication/sign-in/modern' - }, - { - id : 'pages.authentication.sign-in.modern-reversed', - title: 'Modern Reversed', - type : 'basic', - link : '/pages/authentication/sign-in/modern-reversed' - }, - { - id : 'pages.authentication.sign-in.split-screen', - title: 'Split Screen', - type : 'basic', - link : '/pages/authentication/sign-in/split-screen' - }, - { - id : 'pages.authentication.sign-in.split-screen-reversed', - title: 'Split Screen Reversed', - type : 'basic', - link : '/pages/authentication/sign-in/split-screen-reversed' - }, - { - id : 'pages.authentication.sign-in.fullscreen', - title: 'Fullscreen', - type : 'basic', - link : '/pages/authentication/sign-in/fullscreen' - }, - { - id : 'pages.authentication.sign-in.fullscreen-reversed', - title: 'Fullscreen Reversed', - type : 'basic', - link : '/pages/authentication/sign-in/fullscreen-reversed' - } - ] - }, - { - id : 'pages.authentication.sign-up', - title : 'Sign up', - type : 'collapsable', - link : '/pages/authentication/sign-up', - children: [ - { - id : 'pages.authentication.sign-up.classic', - title: 'Classic', - type : 'basic', - link : '/pages/authentication/sign-up/classic' - }, - { - id : 'pages.authentication.sign-up.modern', - title: 'Modern', - type : 'basic', - link : '/pages/authentication/sign-up/modern' - }, - { - id : 'pages.authentication.sign-up.modern-reversed', - title: 'Modern Reversed', - type : 'basic', - link : '/pages/authentication/sign-up/modern-reversed' - }, - { - id : 'pages.authentication.sign-up.split-screen', - title: 'Split Screen', - type : 'basic', - link : '/pages/authentication/sign-up/split-screen' - }, - { - id : 'pages.authentication.sign-up.split-screen-reversed', - title: 'Split Screen Reversed', - type : 'basic', - link : '/pages/authentication/sign-up/split-screen-reversed' - }, - { - id : 'pages.authentication.sign-up.fullscreen', - title: 'Fullscreen', - type : 'basic', - link : '/pages/authentication/sign-up/fullscreen' - }, - { - id : 'pages.authentication.sign-up.fullscreen-reversed', - title: 'Fullscreen Reversed', - type : 'basic', - link : '/pages/authentication/sign-up/fullscreen-reversed' - } - ] - }, - { - id : 'pages.authentication.sign-out', - title : 'Sign out', - type : 'collapsable', - link : '/pages/authentication/sign-out', - children: [ - { - id : 'pages.authentication.sign-out.classic', - title: 'Classic', - type : 'basic', - link : '/pages/authentication/sign-out/classic' - }, - { - id : 'pages.authentication.sign-out.modern', - title: 'Modern', - type : 'basic', - link : '/pages/authentication/sign-out/modern' - }, - { - id : 'pages.authentication.sign-out.modern-reversed', - title: 'Modern Reversed', - type : 'basic', - link : '/pages/authentication/sign-out/modern-reversed' - }, - { - id : 'pages.authentication.sign-out.split-screen', - title: 'Split Screen', - type : 'basic', - link : '/pages/authentication/sign-out/split-screen' - }, - { - id : 'pages.authentication.sign-out.split-screen-reversed', - title: 'Split Screen Reversed', - type : 'basic', - link : '/pages/authentication/sign-out/split-screen-reversed' - }, - { - id : 'pages.authentication.sign-out.fullscreen', - title: 'Fullscreen', - type : 'basic', - link : '/pages/authentication/sign-out/fullscreen' - }, - { - id : 'pages.authentication.sign-out.fullscreen-reversed', - title: 'Fullscreen Reversed', - type : 'basic', - link : '/pages/authentication/sign-out/fullscreen-reversed' - } - ] - }, - { - id : 'pages.authentication.forgot-password', - title : 'Forgot password', - type : 'collapsable', - link : '/pages/authentication/forgot-password', - children: [ - { - id : 'pages.authentication.forgot-password.classic', - title: 'Classic', - type : 'basic', - link : '/pages/authentication/forgot-password/classic' - }, - { - id : 'pages.authentication.forgot-password.modern', - title: 'Modern', - type : 'basic', - link : '/pages/authentication/forgot-password/modern' - }, - { - id : 'pages.authentication.forgot-password.modern-reversed', - title: 'Modern Reversed', - type : 'basic', - link : '/pages/authentication/forgot-password/modern-reversed' - }, - { - id : 'pages.authentication.forgot-password.split-screen', - title: 'Split Screen', - type : 'basic', - link : '/pages/authentication/forgot-password/split-screen' - }, - { - id : 'pages.authentication.forgot-password.split-screen-reversed', - title: 'Split Screen Reversed', - type : 'basic', - link : '/pages/authentication/forgot-password/split-screen-reversed' - }, - { - id : 'pages.authentication.forgot-password.fullscreen', - title: 'Fullscreen', - type : 'basic', - link : '/pages/authentication/forgot-password/fullscreen' - }, - { - id : 'pages.authentication.forgot-password.fullscreen-reversed', - title: 'Fullscreen Reversed', - type : 'basic', - link : '/pages/authentication/forgot-password/fullscreen-reversed' - } - ] - }, - { - id : 'pages.authentication.reset-password', - title : 'Reset password', - type : 'collapsable', - link : '/pages/authentication/reset-password', - children: [ - { - id : 'pages.authentication.reset-password.classic', - title: 'Classic', - type : 'basic', - link : '/pages/authentication/reset-password/classic' - }, - { - id : 'pages.authentication.reset-password.modern', - title: 'Modern', - type : 'basic', - link : '/pages/authentication/reset-password/modern' - }, - { - id : 'pages.authentication.reset-password.modern-reversed', - title: 'Modern Reversed', - type : 'basic', - link : '/pages/authentication/reset-password/modern-reversed' - }, - { - id : 'pages.authentication.reset-password.split-screen', - title: 'Split Screen', - type : 'basic', - link : '/pages/authentication/reset-password/split-screen' - }, - { - id : 'pages.authentication.reset-password.split-screen-reversed', - title: 'Split Screen Reversed', - type : 'basic', - link : '/pages/authentication/reset-password/split-screen-reversed' - }, - { - id : 'pages.authentication.reset-password.fullscreen', - title: 'Fullscreen', - type : 'basic', - link : '/pages/authentication/reset-password/fullscreen' - }, - { - id : 'pages.authentication.reset-password.fullscreen-reversed', - title: 'Fullscreen Reversed', - type : 'basic', - link : '/pages/authentication/reset-password/fullscreen-reversed' - } - ] - }, - { - id : 'pages.authentication.unlock-session', - title : 'Unlock session', - type : 'collapsable', - link : '/pages/authentication/unlock-session', - children: [ - { - id : 'pages.authentication.unlock-session.classic', - title: 'Classic', - type : 'basic', - link : '/pages/authentication/unlock-session/classic' - }, - { - id : 'pages.authentication.unlock-session.modern', - title: 'Modern', - type : 'basic', - link : '/pages/authentication/unlock-session/modern' - }, - { - id : 'pages.authentication.unlock-session.modern-reversed', - title: 'Modern Reversed', - type : 'basic', - link : '/pages/authentication/unlock-session/modern-reversed' - }, - { - id : 'pages.authentication.unlock-session.split-screen', - title: 'Split Screen', - type : 'basic', - link : '/pages/authentication/unlock-session/split-screen' - }, - { - id : 'pages.authentication.unlock-session.split-screen-reversed', - title: 'Split Screen Reversed', - type : 'basic', - link : '/pages/authentication/unlock-session/split-screen-reversed' - }, - { - id : 'pages.authentication.unlock-session.fullscreen', - title: 'Fullscreen', - type : 'basic', - link : '/pages/authentication/unlock-session/fullscreen' - }, - { - id : 'pages.authentication.unlock-session.fullscreen-reversed', - title: 'Fullscreen Reversed', - type : 'basic', - link : '/pages/authentication/unlock-session/fullscreen-reversed' - } - ] - }, - { - id : 'pages.authentication.confirmation-required', - title : 'Confirmation required', - type : 'collapsable', - link : '/pages/authentication/confirmation-required', - children: [ - { - id : 'pages.authentication.confirmation-required.classic', - title: 'Classic', - type : 'basic', - link : '/pages/authentication/confirmation-required/classic' - }, - { - id : 'pages.authentication.confirmation-required.modern', - title: 'Modern', - type : 'basic', - link : '/pages/authentication/confirmation-required/modern' - }, - { - id : 'pages.authentication.confirmation-required.modern-reversed', - title: 'Modern Reversed', - type : 'basic', - link : '/pages/authentication/confirmation-required/modern-reversed' - }, - { - id : 'pages.authentication.confirmation-required.split-screen', - title: 'Split Screen', - type : 'basic', - link : '/pages/authentication/confirmation-required/split-screen' - }, - { - id : 'pages.authentication.confirmation-required.split-screen-reversed', - title: 'Split Screen Reversed', - type : 'basic', - link : '/pages/authentication/confirmation-required/split-screen-reversed' - }, - { - id : 'pages.authentication.confirmation-required.fullscreen', - title: 'Fullscreen', - type : 'basic', - link : '/pages/authentication/confirmation-required/fullscreen' - }, - { - id : 'pages.authentication.confirmation-required.fullscreen-reversed', - title: 'Fullscreen Reversed', - type : 'basic', - link : '/pages/authentication/confirmation-required/fullscreen-reversed' - } - ] - } - ] - }, - { - id : 'pages.coming-soon', - title : 'Coming soon', - type : 'collapsable', - icon : 'heroicons_outline:clock', - link : '/pages/coming-soon', - children: [ - { - id : 'pages.coming-soon.classic', - title: 'Classic', - type : 'basic', - link : '/pages/coming-soon/classic' - }, - { - id : 'pages.coming-soon.modern', - title: 'Modern', - type : 'basic', - link : '/pages/coming-soon/modern' - }, - { - id : 'pages.coming-soon.modern-reversed', - title: 'Modern Reversed', - type : 'basic', - link : '/pages/coming-soon/modern-reversed' - }, - { - id : 'pages.coming-soon.split-screen', - title: 'Split Screen', - type : 'basic', - link : '/pages/coming-soon/split-screen' - }, - { - id : 'pages.coming-soon.split-screen-reversed', - title: 'Split Screen Reversed', - type : 'basic', - link : '/pages/coming-soon/split-screen-reversed' - }, - { - id : 'pages.coming-soon.fullscreen', - title: 'Fullscreen', - type : 'basic', - link : '/pages/coming-soon/fullscreen' - }, - { - id : 'pages.coming-soon.fullscreen-reversed', - title: 'Fullscreen Reversed', - type : 'basic', - link : '/pages/coming-soon/fullscreen-reversed' - } - ] - }, - { - id : 'pages.error', - title : 'Error', - type : 'collapsable', - icon : 'heroicons_outline:exclamation-circle', - children: [ - { - id : 'pages.error.404', - title: '404', - type : 'basic', - link : '/pages/error/404' - }, - { - id : 'pages.error.500', - title: '500', - type : 'basic', - link : '/pages/error/500' - } - ] - }, - { - id : 'pages.invoice', - title : 'Invoice', - type : 'collapsable', - icon : 'heroicons_outline:exclamation-circle', - children: [ - { - id : 'pages.invoice.printable', - title : 'Printable', - type : 'collapsable', - children: [ - { - id : 'pages.invoice.printable.compact', - title: 'Compact', - type : 'basic', - link : '/pages/invoice/printable/compact' - }, - { - id : 'pages.invoice.printable.modern', - title: 'Modern', - type : 'basic', - link : '/pages/invoice/printable/modern' - } - ] - } - ] - }, - { - id : 'pages.maintenance', - title: 'Maintenance', - type : 'basic', - icon : 'heroicons_outline:exclamation', - link : '/pages/maintenance' - }, - { - id : 'pages.pricing', - title : 'Pricing', - type : 'collapsable', - icon : 'heroicons_outline:cash', - children: [ - { - id : 'pages.pricing.modern', - title: 'Modern', - type : 'basic', - link : '/pages/pricing/modern' - }, - { - id : 'pages.pricing.simple', - title: 'Simple', - type : 'basic', - link : '/pages/pricing/simple' - }, - { - id : 'pages.pricing.single', - title: 'Single', - type : 'basic', - link : '/pages/pricing/single' - }, - { - id : 'pages.pricing.table', - title: 'Table', - type : 'basic', - link : '/pages/pricing/table' - } - ] - }, - { - id : 'pages.profile', - title: 'Profile', - type : 'basic', - icon : 'heroicons_outline:user-circle', - link : '/pages/profile' - } - ] - }, - { - id : 'user-interface', - title : 'User Interface', - subtitle: 'Building blocks of the UI & UX', - type : 'group', - icon : 'heroicons_outline:collection', - children: [ - { - id : 'user-interface.angular-material', - title: 'Angular Material', - type : 'basic', - icon : 'heroicons_outline:shield-check', - link : '/ui/angular-material' - }, - { - id : 'user-interface.tailwindcss', - title: 'TailwindCSS', - type : 'basic', - icon : 'heroicons_outline:sparkles', - link : '/ui/tailwindcss' - }, - { - id : 'user-interface.animations', - title: 'Animations', - type : 'basic', - icon : 'heroicons_outline:play', - link : '/ui/animations' - }, - { - id : 'user-interface.cards', - title: 'Cards', - type : 'basic', - icon : 'heroicons_outline:duplicate', - link : '/ui/cards' - }, - { - id : 'user-interface.colors', - title: 'Colors', - type : 'basic', - icon : 'heroicons_outline:color-swatch', - link : '/ui/colors' - }, - { - id : 'user-interface.datatable', - title: 'Datatable', - type : 'basic', - icon : 'heroicons_outline:view-list', - link : '/ui/datatable' - }, - { - id : 'user-interface.forms', - title : 'Forms', - type : 'collapsable', - icon : 'heroicons_outline:pencil-alt', - children: [ - { - id : 'user-interface.forms.fields', - title: 'Fields', - type : 'basic', - link : '/ui/forms/fields' - }, - { - id : 'user-interface.forms.layouts', - title: 'Layouts', - type : 'basic', - link : '/ui/forms/layouts' - }, - { - id : 'user-interface.forms.wizards', - title: 'Wizards', - type : 'basic', - link : '/ui/forms/wizards' - } - ] - }, - { - id : 'user-interface.icons', - title : 'Icons', - type : 'collapsable', - icon : 'heroicons_outline:lightning-bolt', - children: [ - { - id : 'user-interface.icons.heroicons-outline', - title: 'Heroicons Outline', - type : 'basic', - link : '/ui/icons/heroicons-outline' - }, - { - id : 'user-interface.icons.heroicons-solid', - title: 'Heroicons Solid', - type : 'basic', - link : '/ui/icons/heroicons-solid' - }, - { - id : 'user-interface.icons.material-outline', - title: 'Material Outline', - type : 'basic', - link : '/ui/icons/material-outline' - }, - { - id : 'user-interface.icons.material-twotone', - title: 'Material Twotone', - type : 'basic', - link : '/ui/icons/material-twotone' - }, - { - id : 'user-interface.icons.iconsmind', - title: 'Iconsmind', - type : 'basic', - link : '/ui/icons/iconsmind' - }, - { - id : 'user-interface.icons.feather', - title: 'Feather', - type : 'basic', - link : '/ui/icons/feather' - } - ] - }, - { - id : 'user-interface.page-layouts', - title : 'Page layouts', - type : 'collapsable', - icon : 'heroicons_outline:template', - children: [ - { - id : 'user-interface.page-layouts.overview', - title: 'Overview', - type : 'basic', - link : '/ui/page-layouts/overview' - }, - { - id : 'user-interface.page-layouts.empty', - title: 'Empty', - type : 'basic', - link : '/ui/page-layouts/empty' - }, - { - id: 'user-interface.page-layouts.carded', - - title : 'Carded', - type : 'collapsable', - children: [ - { - id : 'user-interface.page-layouts.carded.fullwidth', - title: 'Fullwidth', - type : 'basic', - link : '/ui/page-layouts/carded/fullwidth' - }, - { - id : 'user-interface.page-layouts.carded.left-sidebar-1', - title: 'Left Sidebar #1', - type : 'basic', - link : '/ui/page-layouts/carded/left-sidebar-1' - }, - { - id : 'user-interface.page-layouts.carded.left-sidebar-2', - title: 'Left Sidebar #2', - type : 'basic', - link : '/ui/page-layouts/carded/left-sidebar-2' - }, - { - id : 'user-interface.page-layouts.carded.right-sidebar-1', - title: 'Right Sidebar #1', - type : 'basic', - link : '/ui/page-layouts/carded/right-sidebar-1' - }, - { - id : 'user-interface.page-layouts.carded.right-sidebar-2', - title: 'Right Sidebar #2', - type : 'basic', - link : '/ui/page-layouts/carded/right-sidebar-2' - } - ] - }, - { - id : 'user-interface.page-layouts.simple', - title : 'Simple', - type : 'collapsable', - children: [ - { - id : 'user-interface.page-layouts.simple.fullwidth', - title: 'Fullwidth', - type : 'basic', - link : '/ui/page-layouts/simple/fullwidth' - }, - { - id : 'user-interface.page-layouts.simple.left-sidebar-1', - title: 'Left Sidebar #1', - type : 'basic', - link : '/ui/page-layouts/simple/left-sidebar-1' - }, - { - id : 'user-interface.page-layouts.simple.left-sidebar-2', - title: 'Left Sidebar #2', - type : 'basic', - link : '/ui/page-layouts/simple/left-sidebar-2' - }, - { - id : 'user-interface.page-layouts.simple.left-sidebar-3', - title: 'Left Sidebar #3', - type : 'basic', - link : '/ui/page-layouts/simple/left-sidebar-3' - }, - { - id : 'user-interface.page-layouts.simple.right-sidebar-1', - title: 'Right Sidebar #1', - type : 'basic', - link : '/ui/page-layouts/simple/right-sidebar-1' - }, - { - id : 'user-interface.page-layouts.simple.right-sidebar-2', - title: 'Right Sidebar #2', - type : 'basic', - link : '/ui/page-layouts/simple/right-sidebar-2' - }, - { - id : 'user-interface.page-layouts.simple.right-sidebar-3', - title: 'Right Sidebar #3', - type : 'basic', - link : '/ui/page-layouts/simple/right-sidebar-3' - } - ] - } - ] - }, - { - id : 'user-interface.typography', - title: 'Typography', - type : 'basic', - icon : 'heroicons_outline:pencil', - link : '/ui/typography' - } - ] - }, - { - id : 'divider-1', - type: 'divider' - }, - { - id : 'documentation', - title : 'Documentation', - subtitle: 'Everything you need to know about Fuse', - type : 'group', - icon : 'heroicons_outline:support', - children: [ - { - id : 'documentation.changelog', - title: 'Changelog', - type : 'basic', - icon : 'heroicons_outline:speakerphone', - link : '/docs/changelog', - badge: { - title : '12.0.0', - classes: 'px-2 bg-yellow-300 text-black rounded-full' - } - }, - { - id : 'documentation.guides', - title: 'Guides', - type : 'basic', - icon : 'heroicons_outline:book-open', - link : '/docs/guides' - }, - { - id : 'documentation.core-features', - title: 'Core features', - type : 'basic', - icon : 'heroicons_outline:book-open', - link : '/docs/core-features' - }, - { - id : 'documentation.other-components', - title: 'Other components', - type : 'basic', - icon : 'heroicons_outline:book-open', - link : '/docs/other-components' - } - ] - }, - { - id : 'divider-2', - type: 'divider' - }, - { - id : 'navigation-features', - title : 'Navigation features', - subtitle: 'Collapsable levels & badge styles', - type : 'group', - icon : 'heroicons_outline:menu', - children: [ - { - id : 'navigation-features.level.0', - title : 'Level 0', - icon : 'heroicons_outline:check-circle', - type : 'collapsable', - children: [ - { - id : 'navigation-features.level.0.1', - title : 'Level 1', - type : 'collapsable', - children: [ - { - id : 'navigation-features.level.0.1.2', - title : 'Level 2', - type : 'collapsable', - children: [ - { - id : 'navigation-features.level.0.1.2.3', - title : 'Level 3', - type : 'collapsable', - children: [ - { - id : 'navigation-features.level.0.1.2.3.4', - title : 'Level 4', - type : 'collapsable', - children: [ - { - id : 'navigation-features.level.0.1.2.3.4.5', - title : 'Level 5', - type : 'collapsable', - children: [ - { - id : 'navigation-features.level.0.1.2.3.4.5.6', - title: 'Level 6', - type : 'basic' - } - ] - } - ] - } - ] - } - ] - } - ] - } - ] - }, - { - id : 'navigation-features.level.0', - title : 'Level 0', - subtitle: 'With subtitle', - icon : 'heroicons_outline:check-circle', - type : 'collapsable', - children: [ - { - id : 'navigation-features.level.0.1-1', - title: 'Level 1.1', - type : 'basic' - }, - { - id : 'navigation-features.level.0.1-2', - title: 'Level 1.2', - type : 'basic' - } - ] - }, - { - id : 'navigation-features.active', - title : 'Active item', - subtitle: 'Manually marked as active', - icon : 'heroicons_outline:check-circle', - type : 'basic', - active : true - }, - { - id : 'navigation-features.disabled-collapsable', - title : 'Disabled collapsable', - subtitle: 'Some subtitle', - icon : 'heroicons_outline:check-circle', - type : 'collapsable', - disabled: true, - children: [ - { - id : 'navigation-features.disabled-collapsable.child', - title: 'You shouldn\'t be able to see this child', - type : 'basic' - } - ] - }, - { - id : 'navigation-features.disabled-basic', - title : 'Disabled basic', - subtitle: 'Some subtitle', - icon : 'heroicons_outline:check-circle', - type : 'basic', - disabled: true - }, - { - id : 'navigation-features.badge-style-oval', - title: 'Oval badge', - icon : 'heroicons_outline:tag', - type : 'basic', - badge: { - title : '8', - classes: 'w-5 h-5 bg-teal-400 text-black rounded-full' - } - }, - { - id : 'navigation-features.badge-style-rectangle', - title: 'Rectangle badge', - icon : 'heroicons_outline:tag', - type : 'basic', - badge: { - title : 'Updated!', - classes: 'px-2 bg-teal-400 text-black rounded' - } - }, - { - id : 'navigation-features.badge-style-rounded', - title: 'Rounded badge', - icon : 'heroicons_outline:tag', - type : 'basic', - badge: { - title : 'NEW', - classes: 'px-2.5 bg-teal-400 text-black rounded-full' - } - }, - { - id : 'navigation-features.badge-style-simple', - title: 'Simple badge', - icon : 'heroicons_outline:tag', - type : 'basic', - badge: { - title : '87 Unread', - classes: 'text-teal-500' - } - }, - { - id : 'navigation-features.multi-line', - title: 'A multi line navigation item title example which works just fine', - icon : 'heroicons_outline:check-circle', - type : 'basic' - } - ] + id : 'example', + title: 'Example', + type : 'basic', + icon : 'heroicons_outline:chart-pie', + link : '/example' } ]; export const compactNavigation: FuseNavigationItem[] = [ { - id : 'dashboards', - title : 'Dashboards', - type : 'aside', - icon : 'heroicons_outline:home', - children: [] // This will be filled from defaultNavigation so we don't have to manage multiple sets of the same navigation - }, - { - id : 'apps', - title : 'Apps', - type : 'aside', - icon : 'heroicons_outline:qrcode', - children: [] // This will be filled from defaultNavigation so we don't have to manage multiple sets of the same navigation - }, - { - id : 'pages', - title : 'Pages', - type : 'aside', - icon : 'heroicons_outline:document-duplicate', - children: [] // This will be filled from defaultNavigation so we don't have to manage multiple sets of the same navigation - }, - { - id : 'user-interface', - title : 'UI', - type : 'aside', - icon : 'heroicons_outline:collection', - children: [] // This will be filled from defaultNavigation so we don't have to manage multiple sets of the same navigation - }, - { - id : 'navigation-features', - title : 'Navigation', - type : 'aside', - icon : 'heroicons_outline:menu', - children: [] // This will be filled from defaultNavigation so we don't have to manage multiple sets of the same navigation + id : 'example', + title: 'Example', + type : 'basic', + icon : 'heroicons_outline:chart-pie', + link : '/example' } ]; export const futuristicNavigation: FuseNavigationItem[] = [ { - id : 'apps', - title : 'APPS', - type : 'group', - children: [ - { - id : 'apps.dashboards.analytics', - title: 'Analytics', - type : 'basic', - icon : 'heroicons_outline:chart-pie', - link : '/dashboards/analytics' - }, - { - id : 'apps.dashboards.project', - title: 'Project', - type : 'basic', - icon : 'heroicons_outline:clipboard-check', - link : '/dashboards/project' - }, - { - id : 'apps.calendar', - title: 'Calendar', - type : 'basic', - icon : 'heroicons_outline:calendar', - link : '/apps/calendar' - }, - { - id : 'apps.contacts', - title: 'Contacts', - type : 'basic', - icon : 'heroicons_outline:user-group', - link : '/apps/contacts' - }, - { - id : 'apps.ecommerce', - title : 'ECommerce', - type : 'collapsable', - icon : 'heroicons_outline:shopping-cart', - children: [ - { - id : 'apps.ecommerce.inventory', - title: 'Inventory', - type : 'basic', - link : '/apps/ecommerce/inventory' - } - ] - }, - { - id : 'apps.file-manager', - title: 'File manager', - type : 'basic', - icon : 'heroicons_outline:shopping-cart', - link : '/apps/file-manager' - }, - { - id : 'apps.help-center', - title : 'Help center', - type : 'collapsable', - icon : 'heroicons_outline:support', - link : '/apps/help-center', - children: [ - { - id : 'apps.help-center.home', - title : 'Home', - type : 'basic', - link : '/apps/help-center', - exactMatch: true - }, - { - id : 'apps.help-center.faqs', - title: 'FAQs', - type : 'basic', - link : '/apps/help-center/faqs' - }, - { - id : 'apps.help-center.guides', - title: 'Guides', - type : 'basic', - link : '/apps/help-center/guides' - }, - { - id : 'apps.help-center.support', - title: 'Support', - type : 'basic', - link : '/apps/help-center/support' - } - ] - }, - { - id : 'apps.mailbox', - title: 'Mailbox', - type : 'basic', - icon : 'heroicons_outline:mail', - link : '/apps/mailbox', - badge: { - title : '27', - classes: 'px-2 bg-black bg-opacity-25 text-white rounded-full' - } - }, - { - id : 'apps.tasks', - title: 'Tasks', - type : 'basic', - icon : 'heroicons_outline:check-circle', - link : '/apps/tasks' - } - ] - }, - { - id : 'others', - title: 'OTHERS', - type : 'group' - }, - { - id : 'pages', - title : 'Pages', - type : 'aside', - icon : 'heroicons_outline:document-duplicate', - children: [] // This will be filled from defaultNavigation so we don't have to manage multiple sets of the same navigation - }, - { - id : 'user-interface', - title : 'User Interface', - type : 'aside', - icon : 'heroicons_outline:collection', - children: [] // This will be filled from defaultNavigation so we don't have to manage multiple sets of the same navigation - }, - { - id : 'navigation-features', - title : 'Navigation Features', - type : 'aside', - icon : 'heroicons_outline:menu', - children: [] // This will be filled from defaultNavigation so we don't have to manage multiple sets of the same navigation + id : 'example', + title: 'Example', + type : 'basic', + icon : 'heroicons_outline:chart-pie', + link : '/example' } ]; export const horizontalNavigation: FuseNavigationItem[] = [ { - id : 'dashboards', - title : 'Dashboards', - type : 'group', - icon : 'heroicons_outline:home', - children: [] // This will be filled from defaultNavigation so we don't have to manage multiple sets of the same navigation - }, - { - id : 'apps', - title : 'Apps', - type : 'group', - icon : 'heroicons_outline:qrcode', - children: [] // This will be filled from defaultNavigation so we don't have to manage multiple sets of the same navigation - }, - { - id : 'pages', - title : 'Pages', - type : 'group', - icon : 'heroicons_outline:document-duplicate', - children: [] // This will be filled from defaultNavigation so we don't have to manage multiple sets of the same navigation - }, - { - id : 'user-interface', - title : 'UI', - type : 'group', - icon : 'heroicons_outline:collection', - children: [] // This will be filled from defaultNavigation so we don't have to manage multiple sets of the same navigation - }, - { - id : 'navigation-features', - title : 'Misc', - type : 'group', - icon : 'heroicons_outline:menu', - children: [] // This will be filled from defaultNavigation so we don't have to manage multiple sets of the same navigation + id : 'example', + title: 'Example', + type : 'basic', + icon : 'heroicons_outline:chart-pie', + link : '/example' } ]; diff --git a/src/app/modules/admin/apps/calendar/calendar.component.html b/src/app/modules/admin/apps/calendar/calendar.component.html deleted file mode 100644 index 76e92f33..00000000 --- a/src/app/modules/admin/apps/calendar/calendar.component.html +++ /dev/null @@ -1,386 +0,0 @@ -
- - - - - - - - - - - -
- - -
- - - -
- {{viewTitle}} -
- - - - - - - - - - -
- - - - - - - - - - - -
-
- - -
- -
- - - - - - -
- -
- -
- -
-
{{event.title || '(No title)'}}
-
{{event.start | date:'EEEE, MMMM d'}}
-
{{recurrenceStatus}}
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- -
{{event.description}}
-
- - -
- -
-
-
{{getCalendar(event.calendarId).title}}
-
-
-
-
- - - -
- - -
- - - - -
- - -
- -
- - - All day - -
-
- - -
- -
-
- {{recurrenceStatus || 'Does not repeat'}} -
-
-
- - -
- - - - - - {{getCalendar(eventForm.get('calendarId').value)?.title}} - - -
- - {{calendar.title}} -
-
-
-
-
- - -
- - - - -
- - -
- - -
-
-
- -
- -
- -
- -
- -
- - diff --git a/src/app/modules/admin/apps/calendar/calendar.component.scss b/src/app/modules/admin/apps/calendar/calendar.component.scss deleted file mode 100644 index 59754831..00000000 --- a/src/app/modules/admin/apps/calendar/calendar.component.scss +++ /dev/null @@ -1,121 +0,0 @@ -calendar { - - /* Tweak: FullCalendar CSS only height to improve resize performance */ - /* With this tweak, we can disable "handleWindowResize" option of FullCalendar */ - /* which disables the height calculations on window resize and increases the */ - /* overall performance. */ - /* This tweak only affects the Calendar app's FullCalendar. */ - full-calendar { - display: flex; - flex-direction: column; - flex: 1 0 auto; - width: 100%; - height: 100%; - - .fc-view-container { - display: flex; - flex-direction: column; - flex: 1 0 auto; - width: 100%; - height: 100%; - - .fc-view { - - /* Day grid - Month view */ - /* Time grid - Week view */ - /* Time grid - Day view */ - &.fc-dayGridMonth-view, - &.fc-timeGridWeek-view, - &.fc-timeGridDay-view { - display: flex; - flex-direction: column; - flex: 1 0 auto; - width: 100%; - height: 100%; - - > table { - display: flex; - flex-direction: column; - flex: 1 0 auto; - height: 100%; - - > thead { - display: flex; - } - - > tbody { - display: flex; - flex: 1 1 auto; - overflow: hidden; - - > tr { - display: flex; - - > td { - display: flex; - flex-direction: column; - - .fc-scroller { - flex: 1 1 auto; - overflow: hidden scroll !important; - height: auto !important; - - } - } - } - } - } - } - - /* Day grid - Month view */ - &.fc-dayGridMonth-view { - - > table { - - > tbody { - - > tr { - - > td { - - .fc-scroller { - display: flex; - - > .fc-day-grid { - display: flex; - flex-direction: column; - min-height: 580px; - - > .fc-row { - flex: 1 0 0; - height: auto !important; - } - } - } - } - } - } - } - } - - /* List - Year view */ - &.fc-listYear-view { - width: 100%; - height: 100%; - - .fc-scroller { - width: 100%; - height: 100% !important; - overflow: hidden !important; - } - } - } - } - } -} - -/* Event panel */ -.calendar-event-panel { - border-radius: 8px; - @apply shadow-2xl bg-card; -} diff --git a/src/app/modules/admin/apps/calendar/calendar.component.ts b/src/app/modules/admin/apps/calendar/calendar.component.ts deleted file mode 100644 index db0b9658..00000000 --- a/src/app/modules/admin/apps/calendar/calendar.component.ts +++ /dev/null @@ -1,1011 +0,0 @@ -import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, OnDestroy, OnInit, TemplateRef, ViewChild, ViewContainerRef, ViewEncapsulation } from '@angular/core'; -import { DOCUMENT } from '@angular/common'; -import { FormBuilder, FormGroup } from '@angular/forms'; -import { Overlay, OverlayRef } from '@angular/cdk/overlay'; -import { TemplatePortal } from '@angular/cdk/portal'; -import { MatDialog } from '@angular/material/dialog'; -import { MatDrawer } from '@angular/material/sidenav'; -import { FullCalendarComponent } from '@fullcalendar/angular'; -import { Calendar as FullCalendar } from '@fullcalendar/core'; -import dayGridPlugin from '@fullcalendar/daygrid'; -import listPlugin from '@fullcalendar/list'; -import interactionPlugin from '@fullcalendar/interaction'; -import momentPlugin from '@fullcalendar/moment'; -import rrulePlugin from '@fullcalendar/rrule'; -import timeGridPlugin from '@fullcalendar/timegrid'; -import { clone, cloneDeep, isEqual, omit } from 'lodash-es'; -import * as moment from 'moment'; -import { RRule } from 'rrule'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import { FuseMediaWatcherService } from '@fuse/services/media-watcher'; -import { CalendarRecurrenceComponent } from 'app/modules/admin/apps/calendar/recurrence/recurrence.component'; -import { CalendarService } from 'app/modules/admin/apps/calendar/calendar.service'; -import { Calendar, CalendarDrawerMode, CalendarEvent, CalendarEventEditMode, CalendarEventPanelMode, CalendarSettings } from 'app/modules/admin/apps/calendar/calendar.types'; - -@Component({ - selector : 'calendar', - templateUrl : './calendar.component.html', - styleUrls : ['./calendar.component.scss'], - changeDetection: ChangeDetectionStrategy.OnPush, - encapsulation : ViewEncapsulation.None -}) -export class CalendarComponent implements OnInit, AfterViewInit, OnDestroy -{ - @ViewChild('eventPanel') private _eventPanel: TemplateRef; - @ViewChild('fullCalendar') private _fullCalendar: FullCalendarComponent; - @ViewChild('drawer') private _drawer: MatDrawer; - - calendars: Calendar[]; - calendarPlugins: any[] = [dayGridPlugin, interactionPlugin, listPlugin, momentPlugin, rrulePlugin, timeGridPlugin]; - drawerMode: CalendarDrawerMode = 'side'; - drawerOpened: boolean = true; - event: CalendarEvent; - eventEditMode: CalendarEventEditMode = 'single'; - eventForm: FormGroup; - eventTimeFormat: any; - events: CalendarEvent[] = []; - panelMode: CalendarEventPanelMode = 'view'; - settings: CalendarSettings; - view: 'dayGridMonth' | 'timeGridWeek' | 'timeGridDay' | 'listYear' = 'dayGridMonth'; - views: any; - viewTitle: string; - private _eventPanelOverlayRef: OverlayRef; - private _fullCalendarApi: FullCalendar; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor( - private _calendarService: CalendarService, - private _changeDetectorRef: ChangeDetectorRef, - @Inject(DOCUMENT) private _document: Document, - private _formBuilder: FormBuilder, - private _matDialog: MatDialog, - private _overlay: Overlay, - private _fuseMediaWatcherService: FuseMediaWatcherService, - private _viewContainerRef: ViewContainerRef - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Accessors - // ----------------------------------------------------------------------------------------------------- - - /** - * Getter for event's recurrence status - */ - get recurrenceStatus(): string - { - // Get the recurrence from event form - const recurrence = this.eventForm.get('recurrence').value; - - // Return null, if there is no recurrence on the event - if ( !recurrence ) - { - return null; - } - - // Convert the recurrence rule to text - let ruleText = RRule.fromString(recurrence).toText(); - ruleText = ruleText.charAt(0).toUpperCase() + ruleText.slice(1); - - // Return the rule text - return ruleText; - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the event form - this.eventForm = this._formBuilder.group({ - id : [''], - calendarId : [''], - recurringEventId: [null], - title : [''], - description : [''], - start : [null], - end : [null], - duration : [null], - allDay : [true], - recurrence : [null], - range : [{}] - }); - - // Subscribe to 'range' field value changes - this.eventForm.get('range').valueChanges.subscribe((value) => { - - if ( !value ) - { - return; - } - - // Set the 'start' field value from the range - this.eventForm.get('start').setValue(value.start, {emitEvent: false}); - - // If this is a recurring event... - if ( this.eventForm.get('recurrence').value ) - { - // Update the recurrence rules if needed - this._updateRecurrenceRule(); - - // Set the duration field - const duration = moment(value.end).diff(moment(value.start), 'minutes'); - this.eventForm.get('duration').setValue(duration, {emitEvent: false}); - - // Update the end value - this._updateEndValue(); - } - // Otherwise... - else - { - // Set the end field - this.eventForm.get('end').setValue(value.end, {emitEvent: false}); - } - }); - - // Subscribe to 'recurrence' field changes - this.eventForm.get('recurrence').valueChanges.subscribe((value) => { - - // If this is a recurring event... - if ( value ) - { - // Update the end value - this._updateEndValue(); - } - }); - - // Get calendars - this._calendarService.calendars$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((calendars) => { - - // Store the calendars - this.calendars = calendars; - - // Mark for check - this._changeDetectorRef.markForCheck(); - }); - - // Get events - this._calendarService.events$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((events) => { - - // Clone the events to change the object reference so - // that the FullCalendar can trigger a re-render. - this.events = cloneDeep(events); - - // Mark for check - this._changeDetectorRef.markForCheck(); - }); - - // Get settings - this._calendarService.settings$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((settings) => { - - // Store the settings - this.settings = settings; - - // Set the FullCalendar event time format based on the time format setting - this.eventTimeFormat = { - hour : settings.timeFormat === '12' ? 'numeric' : '2-digit', - hour12 : settings.timeFormat === '12', - minute : '2-digit', - meridiem: settings.timeFormat === '12' ? 'short' : false - }; - - // Mark for check - this._changeDetectorRef.markForCheck(); - }); - - // Subscribe to media changes - this._fuseMediaWatcherService.onMediaChange$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe(({matchingAliases}) => { - - // Set the drawerMode and drawerOpened if the given breakpoint is active - if ( matchingAliases.includes('md') ) - { - this.drawerMode = 'side'; - this.drawerOpened = true; - } - else - { - this.drawerMode = 'over'; - this.drawerOpened = false; - } - - // Mark for check - this._changeDetectorRef.markForCheck(); - }); - - // Build the view specific FullCalendar options - this.views = { - dayGridMonth: { - eventLimit : 3, - eventTimeFormat: this.eventTimeFormat, - fixedWeekCount : false - }, - timeGrid : { - allDayText : '', - columnHeaderFormat: { - weekday : 'short', - day : 'numeric', - omitCommas: true - }, - columnHeaderHtml : (date) => { - return `${moment(date).format('ddd')} - ${moment(date).format('D')}`; - }, - slotDuration : '01:00:00', - slotLabelFormat : this.eventTimeFormat - }, - timeGridWeek: {}, - timeGridDay : {}, - listYear : { - allDayText : 'All day', - eventTimeFormat : this.eventTimeFormat, - listDayFormat : false, - listDayAltFormat: false - } - }; - } - - /** - * After view init - */ - ngAfterViewInit(): void - { - // Get the full calendar API - this._fullCalendarApi = this._fullCalendar.getApi(); - - // Get the current view's title - this.viewTitle = this._fullCalendarApi.view.title; - - // Get the view's current start and end dates, add/subtract - // 60 days to create a ~150 days period to fetch the mock-api for - const viewStart = moment(this._fullCalendarApi.view.currentStart).subtract(60, 'days'); - const viewEnd = moment(this._fullCalendarApi.view.currentEnd).add(60, 'days'); - - // Get events - this._calendarService.getEvents(viewStart, viewEnd, true).subscribe(); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - - // Dispose the overlay - if ( this._eventPanelOverlayRef ) - { - this._eventPanelOverlayRef.dispose(); - } - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle Drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._drawer.toggle(); - } - - /** - * Open recurrence panel - */ - openRecurrenceDialog(): void - { - // Open the dialog - const dialogRef = this._matDialog.open(CalendarRecurrenceComponent, { - panelClass: 'calendar-event-recurrence-dialog', - data : { - event: this.eventForm.value - } - }); - - // After dialog closed - dialogRef.afterClosed().subscribe((result) => { - - // Return if canceled - if ( !result || !result.recurrence ) - { - return; - } - - // Only update the recurrence if it actually changed - if ( this.eventForm.get('recurrence').value === result.recurrence ) - { - return; - } - - // If returned value is 'cleared'... - if ( result.recurrence === 'cleared' ) - { - // Clear the recurrence field if recurrence cleared - this.eventForm.get('recurrence').setValue(null); - } - // Otherwise... - else - { - // Update the recurrence field with the result - this.eventForm.get('recurrence').setValue(result.recurrence); - } - }); - } - - /** - * Change the event panel mode between view and edit - * mode while setting the event edit mode - * - * @param panelMode - * @param eventEditMode - */ - changeEventPanelMode(panelMode: CalendarEventPanelMode, eventEditMode: CalendarEventEditMode = 'single'): void - { - // Set the panel mode - this.panelMode = panelMode; - - // Set the event edit mode - this.eventEditMode = eventEditMode; - - // Update the panel position - setTimeout(() => { - this._eventPanelOverlayRef.updatePosition(); - }); - } - - /** - * Get calendar by id - * - * @param id - */ - getCalendar(id): Calendar - { - if ( !id ) - { - return; - } - - return this.calendars.find((calendar) => calendar.id === id); - } - - /** - * Change the calendar view - * - * @param view - */ - changeView(view: 'dayGridMonth' | 'timeGridWeek' | 'timeGridDay' | 'listYear'): void - { - // Store the view - this.view = view; - - // If the FullCalendar API is available... - if ( this._fullCalendarApi ) - { - // Set the view - this._fullCalendarApi.changeView(view); - - // Update the view title - this.viewTitle = this._fullCalendarApi.view.title; - } - } - - /** - * Moves the calendar one stop back - */ - previous(): void - { - // Go to previous stop - this._fullCalendarApi.prev(); - - // Update the view title - this.viewTitle = this._fullCalendarApi.view.title; - - // Get the view's current start date - const start = moment(this._fullCalendarApi.view.currentStart); - - // Prefetch past events - this._calendarService.prefetchPastEvents(start).subscribe(); - } - - /** - * Moves the calendar to the current date - */ - today(): void - { - // Go to today - this._fullCalendarApi.today(); - - // Update the view title - this.viewTitle = this._fullCalendarApi.view.title; - } - - /** - * Moves the calendar one stop forward - */ - next(): void - { - // Go to next stop - this._fullCalendarApi.next(); - - // Update the view title - this.viewTitle = this._fullCalendarApi.view.title; - - // Get the view's current end date - const end = moment(this._fullCalendarApi.view.currentEnd); - - // Prefetch future events - this._calendarService.prefetchFutureEvents(end).subscribe(); - } - - /** - * On date click - * - * @param calendarEvent - */ - onDateClick(calendarEvent): void - { - // Prepare the event - const event = { - id : null, - calendarId : this.calendars[0].id, - recurringEventId: null, - isFirstInstance : false, - title : '', - description : '', - start : moment(calendarEvent.date).startOf('day').toISOString(), - end : moment(calendarEvent.date).endOf('day').toISOString(), - duration : null, - allDay : true, - recurrence : null, - range : { - start: moment(calendarEvent.date).startOf('day').toISOString(), - end : moment(calendarEvent.date).endOf('day').toISOString() - } - }; - - // Set the event - this.event = event; - - // Set the el on calendarEvent for consistency - calendarEvent.el = calendarEvent.dayEl; - - // Reset the form and fill the event - this.eventForm.reset(); - this.eventForm.patchValue(event); - - // Open the event panel - this._openEventPanel(calendarEvent); - - // Change the event panel mode - this.changeEventPanelMode('add'); - } - - /** - * On event click - * - * @param calendarEvent - */ - onEventClick(calendarEvent): void - { - // Find the event with the clicked event's id - const event: any = cloneDeep(this.events.find(item => item.id === calendarEvent.event.id)); - - // Set the event - this.event = event; - - // Prepare the end value - let end; - - // If this is a recurring event... - if ( event.recuringEventId ) - { - // Calculate the end value using the duration - end = moment(event.start).add(event.duration, 'minutes').toISOString(); - } - // Otherwise... - else - { - // Set the end value from the end - end = event.end; - } - - // Set the range on the event - event.range = { - start: event.start, - end - }; - - // Reset the form and fill the event - this.eventForm.reset(); - this.eventForm.patchValue(event); - - // Open the event panel - this._openEventPanel(calendarEvent); - } - - /** - * On event render - * - * @param calendarEvent - */ - onEventRender(calendarEvent): void - { - // Get event's calendar - const calendar = this.calendars.find((item) => item.id === calendarEvent.event.extendedProps.calendarId); - - // Return if the calendar doesn't exist... - if ( !calendar ) - { - return; - } - - // If current view is year list... - if ( this.view === 'listYear' ) - { - // Create a new 'fc-list-item-date' node - const fcListItemDate1 = ` - - ${moment(calendarEvent.event.start).format('D')} - ${moment(calendarEvent.event.start).format('MMM')}, ${moment(calendarEvent.event.start).format('ddd')} - - `; - - // Insert the 'fc-list-item-date' into the calendar event element - calendarEvent.el.insertAdjacentHTML('afterbegin', fcListItemDate1); - - // Set the color class of the event dot - calendarEvent.el.getElementsByClassName('fc-event-dot')[0].classList.add(calendar.color); - - // Set the event's title to '(No title)' if event title is not available - if ( !calendarEvent.event.title ) - { - calendarEvent.el.querySelector('.fc-list-item-title').innerText = '(No title)'; - } - } - // If current view is not month list... - else - { - // Set the color class of the event - calendarEvent.el.classList.add(calendar.color); - - // Set the event's title to '(No title)' if event title is not available - if ( !calendarEvent.event.title ) - { - calendarEvent.el.querySelector('.fc-title').innerText = '(No title)'; - } - } - - // Set the event's visibility - calendarEvent.el.style.display = calendar.visible ? 'flex' : 'none'; - } - - /** - * On calendar updated - * - * @param calendar - */ - onCalendarUpdated(calendar): void - { - // Re-render the events - this._fullCalendarApi.rerenderEvents(); - } - - /** - * Add event - */ - addEvent(): void - { - // Get the clone of the event form value - let newEvent = clone(this.eventForm.value); - - // If the event is a recurring event... - if ( newEvent.recurrence ) - { - // Set the event duration - newEvent.duration = moment(newEvent.range.end).diff(moment(newEvent.range.start), 'minutes'); - } - - // Modify the event before sending it to the server - newEvent = omit(newEvent, ['range', 'recurringEventId']); - - // Add the event - this._calendarService.addEvent(newEvent).subscribe(() => { - - // Reload events - this._calendarService.reloadEvents().subscribe(); - - // Close the event panel - this._closeEventPanel(); - }); - } - - /** - * Update the event - */ - updateEvent(): void - { - // Get the clone of the event form value - let event = clone(this.eventForm.value); - const { - range, - ...eventWithoutRange - } = event; - - // Get the original event - const originalEvent = this.events.find(item => item.id === event.id); - - // Return if there are no changes made to the event - if ( isEqual(eventWithoutRange, originalEvent) ) - { - // Close the event panel - this._closeEventPanel(); - - // Return - return; - } - - // If the event is a recurring event... - if ( event.recurrence && event.recurringEventId ) - { - // Update the recurring event on the server - this._calendarService.updateRecurringEvent(event, originalEvent, this.eventEditMode).subscribe(() => { - - // Reload events - this._calendarService.reloadEvents().subscribe(); - - // Close the event panel - this._closeEventPanel(); - }); - - // Return - return; - } - - // If the event is a non-recurring event... - if ( !event.recurrence && !event.recurringEventId ) - { - // Update the event on the server - this._calendarService.updateEvent(event.id, event).subscribe(() => { - - // Close the event panel - this._closeEventPanel(); - }); - - // Return - return; - } - - // If the event was a non-recurring event but now it will be a recurring event... - if ( event.recurrence && !event.recurringEventId ) - { - // Set the event duration - event.duration = moment(event.range.end).diff(moment(event.range.start), 'minutes'); - - // Omit unnecessary fields - event = omit(event, ['range', 'recurringEventId']); - - // Update the event on the server - this._calendarService.updateEvent(event.id, event).subscribe(() => { - - // Reload events - this._calendarService.reloadEvents().subscribe(); - - // Close the event panel - this._closeEventPanel(); - }); - - // Return - return; - } - - // If the event was a recurring event but now it will be a non-recurring event... - if ( !event.recurrence && event.recurringEventId ) - { - // Set the end date - event.end = moment(event.start).add(event.duration, 'minutes').toISOString(); - - // Set the duration as null - event.duration = null; - - // Update the recurring event on the server - this._calendarService.updateRecurringEvent(event, originalEvent, this.eventEditMode).subscribe(() => { - - // Reload events - this._calendarService.reloadEvents().subscribe(); - - // Close the event panel - this._closeEventPanel(); - }); - } - } - - /** - * Delete the given event - * - * @param event - * @param mode - */ - deleteEvent(event, mode: CalendarEventEditMode = 'single'): void - { - // If the event is a recurring event... - if ( event.recurrence ) - { - // Delete the recurring event on the server - this._calendarService.deleteRecurringEvent(event, mode).subscribe(() => { - - // Reload events - this._calendarService.reloadEvents().subscribe(); - - // Close the event panel - this._closeEventPanel(); - }); - } - // If the event is a non-recurring, normal event... - else - { - // Update the event on the server - this._calendarService.deleteEvent(event.id).subscribe(() => { - - // Close the event panel - this._closeEventPanel(); - }); - } - } - - // ----------------------------------------------------------------------------------------------------- - // @ Private methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Create the event panel overlay - * @private - */ - private _createEventPanelOverlay(positionStrategy): void - { - // Create the overlay - this._eventPanelOverlayRef = this._overlay.create({ - panelClass : ['calendar-event-panel'], - backdropClass : '', - hasBackdrop : true, - scrollStrategy: this._overlay.scrollStrategies.reposition(), - positionStrategy - }); - - // Detach the overlay from the portal on backdrop click - this._eventPanelOverlayRef.backdropClick().subscribe(() => { - this._closeEventPanel(); - }); - } - - /** - * Open the event panel - * - * @private - */ - private _openEventPanel(calendarEvent): void - { - const positionStrategy = this._overlay.position().flexibleConnectedTo(calendarEvent.el).withFlexibleDimensions(false).withPositions([ - { - originX : 'end', - originY : 'top', - overlayX: 'start', - overlayY: 'top', - offsetX : 8 - }, - { - originX : 'start', - originY : 'top', - overlayX: 'end', - overlayY: 'top', - offsetX : -8 - }, - { - originX : 'start', - originY : 'bottom', - overlayX: 'end', - overlayY: 'bottom', - offsetX : -8 - }, - { - originX : 'end', - originY : 'bottom', - overlayX: 'start', - overlayY: 'bottom', - offsetX : 8 - } - ]); - - // Create the overlay if it doesn't exist - if ( !this._eventPanelOverlayRef ) - { - this._createEventPanelOverlay(positionStrategy); - } - // Otherwise, just update the position - else - { - this._eventPanelOverlayRef.updatePositionStrategy(positionStrategy); - } - - // Attach the portal to the overlay - this._eventPanelOverlayRef.attach(new TemplatePortal(this._eventPanel, this._viewContainerRef)); - - // Mark for check - this._changeDetectorRef.markForCheck(); - } - - /** - * Close the event panel - * - * @private - */ - private _closeEventPanel(): void - { - // Detach the overlay from the portal - this._eventPanelOverlayRef.detach(); - - // Reset the panel and event edit modes - this.panelMode = 'view'; - this.eventEditMode = 'single'; - - // Mark for check - this._changeDetectorRef.markForCheck(); - } - - /** - * Update the recurrence rule based on the event if needed - * - * @private - */ - private _updateRecurrenceRule(): void - { - // Get the event - const event = this.eventForm.value; - - // Return if this is a non-recurring event - if ( !event.recurrence ) - { - return; - } - - // Parse the recurrence rule - const parsedRules = {}; - event.recurrence.split(';').forEach((rule) => { - - // Split the rule - const parsedRule = rule.split('='); - - // Add the rule to the parsed rules - parsedRules[parsedRule[0]] = parsedRule[1]; - }); - - // If there is a BYDAY rule, split that as well - if ( parsedRules['BYDAY'] ) - { - parsedRules['BYDAY'] = parsedRules['BYDAY'].split(','); - } - - // Do not update the recurrence rule if ... - // ... the frequency is DAILY, - // ... the frequency is WEEKLY and BYDAY has multiple values, - // ... the frequency is MONTHLY and there isn't a BYDAY rule, - // ... the frequency is YEARLY, - if ( parsedRules['FREQ'] === 'DAILY' || - (parsedRules['FREQ'] === 'WEEKLY' && parsedRules['BYDAY'].length > 1) || - (parsedRules['FREQ'] === 'MONTHLY' && !parsedRules['BYDAY']) || - parsedRules['FREQ'] === 'YEARLY' ) - { - return; - } - - // If the frequency is WEEKLY, update the BYDAY value with the new one - if ( parsedRules['FREQ'] === 'WEEKLY' ) - { - parsedRules['BYDAY'] = [moment(event.start).format('dd').toUpperCase()]; - } - - // If the frequency is MONTHLY, update the BYDAY value with the new one - if ( parsedRules['FREQ'] === 'MONTHLY' ) - { - // Calculate the weekday - const weekday = moment(event.start).format('dd').toUpperCase(); - - // Calculate the nthWeekday - let nthWeekdayNo = 1; - while ( moment(event.start).isSame(moment(event.start).subtract(nthWeekdayNo, 'week'), 'month') ) - { - nthWeekdayNo++; - } - - // Set the BYDAY - parsedRules['BYDAY'] = [nthWeekdayNo + weekday]; - } - - // Generate the rule string from the parsed rules - const rules = []; - Object.keys(parsedRules).forEach((key) => { - rules.push(key + '=' + (Array.isArray(parsedRules[key]) ? parsedRules[key].join(',') : parsedRules[key])); - }); - const rrule = rules.join(';'); - - // Update the recurrence rule - this.eventForm.get('recurrence').setValue(rrule); - } - - /** - * Update the end value based on the recurrence and duration - * - * @private - */ - private _updateEndValue(): void - { - // Get the event recurrence - const recurrence = this.eventForm.get('recurrence').value; - - // Return if this is a non-recurring event - if ( !recurrence ) - { - return; - } - - // Parse the recurrence rule - const parsedRules = {}; - recurrence.split(';').forEach((rule) => { - - // Split the rule - const parsedRule = rule.split('='); - - // Add the rule to the parsed rules - parsedRules[parsedRule[0]] = parsedRule[1]; - }); - - // If there is an UNTIL rule... - if ( parsedRules['UNTIL'] ) - { - // Use that to set the end date - this.eventForm.get('end').setValue(parsedRules['UNTIL']); - - // Return - return; - } - - // If there is a COUNT rule... - if ( parsedRules['COUNT'] ) - { - // Generate the RRule string - const rrule = 'DTSTART=' + moment(this.eventForm.get('start').value).utc().format('YYYYMMDD[T]HHmmss[Z]') + '\nRRULE:' + recurrence; - - // Use RRule string to generate dates - const dates = RRule.fromString(rrule).all(); - - // Get the last date from dates array and set that as the end date - this.eventForm.get('end').setValue(moment(dates[dates.length - 1]).toISOString()); - - // Return - return; - } - - // If there are no UNTIL or COUNT, set the end date to a fixed value - this.eventForm.get('end').setValue(moment().year(9999).endOf('year').toISOString()); - } -} diff --git a/src/app/modules/admin/apps/calendar/calendar.module.ts b/src/app/modules/admin/apps/calendar/calendar.module.ts deleted file mode 100644 index 12b15b2a..00000000 --- a/src/app/modules/admin/apps/calendar/calendar.module.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { ScrollingModule } from '@angular/cdk/scrolling'; -import { MAT_DATE_FORMATS } from '@angular/material/core'; -import { MatButtonModule } from '@angular/material/button'; -import { MatButtonToggleModule } from '@angular/material/button-toggle'; -import { MatCheckboxModule } from '@angular/material/checkbox'; -import { MatDatepickerModule } from '@angular/material/datepicker'; -import { MatDialogModule } from '@angular/material/dialog'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatIconModule } from '@angular/material/icon'; -import { MatInputModule } from '@angular/material/input'; -import { MatMenuModule } from '@angular/material/menu'; -import { MatMomentDateModule } from '@angular/material-moment-adapter'; -import { MatRadioModule } from '@angular/material/radio'; -import { MatSelectModule } from '@angular/material/select'; -import { MatSidenavModule } from '@angular/material/sidenav'; -import { MatTooltipModule } from '@angular/material/tooltip'; -import { FullCalendarModule } from '@fullcalendar/angular'; -import { FuseDateRangeModule } from '@fuse/components/date-range'; -import { SharedModule } from 'app/shared/shared.module'; -import { CalendarComponent } from 'app/modules/admin/apps/calendar/calendar.component'; -import { CalendarRecurrenceComponent } from 'app/modules/admin/apps/calendar/recurrence/recurrence.component'; -import { CalendarSettingsComponent } from 'app/modules/admin/apps/calendar/settings/settings.component'; -import { CalendarSidebarComponent } from 'app/modules/admin/apps/calendar/sidebar/sidebar.component'; -import { calendarRoutes } from 'app/modules/admin/apps/calendar/calendar.routing'; - -@NgModule({ - declarations: [ - CalendarComponent, - CalendarRecurrenceComponent, - CalendarSettingsComponent, - CalendarSidebarComponent - ], - imports : [ - RouterModule.forChild(calendarRoutes), - ScrollingModule, - MatButtonModule, - MatButtonToggleModule, - MatCheckboxModule, - MatDatepickerModule, - MatDialogModule, - MatFormFieldModule, - MatIconModule, - MatInputModule, - MatMenuModule, - MatMomentDateModule, - MatRadioModule, - MatSelectModule, - MatSidenavModule, - MatTooltipModule, - FullCalendarModule, - FuseDateRangeModule, - SharedModule - ], - providers : [ - { - provide : MAT_DATE_FORMATS, - useValue: { - parse : { - dateInput: 'DD.MM.YYYY' - }, - display: { - dateInput : 'DD.MM.YYYY', - monthYearLabel : 'MMM YYYY', - dateA11yLabel : 'DD.MM.YYYY', - monthYearA11yLabel: 'MMMM YYYY' - } - } - } - ] -}) -export class CalendarModule -{ -} diff --git a/src/app/modules/admin/apps/calendar/calendar.resolvers.ts b/src/app/modules/admin/apps/calendar/calendar.resolvers.ts deleted file mode 100644 index b53a9762..00000000 --- a/src/app/modules/admin/apps/calendar/calendar.resolvers.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { Injectable } from '@angular/core'; -import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router'; -import { Observable } from 'rxjs'; -import { CalendarService } from 'app/modules/admin/apps/calendar/calendar.service'; -import { Calendar, CalendarSettings, CalendarWeekday } from 'app/modules/admin/apps/calendar/calendar.types'; - -@Injectable({ - providedIn: 'root' -}) -export class CalendarCalendarsResolver implements Resolve -{ - /** - * Constructor - */ - constructor(private _calendarService: CalendarService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Resolver - * - * @param route - * @param state - */ - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable - { - return this._calendarService.getCalendars(); - } -} - -@Injectable({ - providedIn: 'root' -}) -export class CalendarSettingsResolver implements Resolve -{ - /** - * Constructor - */ - constructor(private _calendarService: CalendarService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Resolver - * - * @param route - * @param state - */ - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable - { - return this._calendarService.getSettings(); - } -} - -@Injectable({ - providedIn: 'root' -}) -export class CalendarWeekdaysResolver implements Resolve -{ - /** - * Constructor - */ - constructor(private _calendarService: CalendarService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Resolver - * - * @param route - * @param state - */ - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable - { - return this._calendarService.getWeekdays(); - } -} diff --git a/src/app/modules/admin/apps/calendar/calendar.routing.ts b/src/app/modules/admin/apps/calendar/calendar.routing.ts deleted file mode 100644 index 79d7d32b..00000000 --- a/src/app/modules/admin/apps/calendar/calendar.routing.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Route } from '@angular/router'; -import { CalendarComponent } from 'app/modules/admin/apps/calendar/calendar.component'; -import { CalendarSettingsComponent } from 'app/modules/admin/apps/calendar/settings/settings.component'; -import { CalendarCalendarsResolver, CalendarSettingsResolver, CalendarWeekdaysResolver } from 'app/modules/admin/apps/calendar/calendar.resolvers'; - -export const calendarRoutes: Route[] = [ - { - path : '', - component: CalendarComponent, - resolve : { - calendars: CalendarCalendarsResolver, - settings : CalendarSettingsResolver, - weekdays : CalendarWeekdaysResolver - } - }, - { - path : 'settings', - component: CalendarSettingsComponent, - resolve : { - settings: CalendarSettingsResolver - } - } -]; diff --git a/src/app/modules/admin/apps/calendar/calendar.service.ts b/src/app/modules/admin/apps/calendar/calendar.service.ts deleted file mode 100644 index d8e743cb..00000000 --- a/src/app/modules/admin/apps/calendar/calendar.service.ts +++ /dev/null @@ -1,475 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient } from '@angular/common/http'; -import { BehaviorSubject, Observable, of } from 'rxjs'; -import { map, switchMap, take, tap } from 'rxjs/operators'; -import { Moment } from 'moment'; -import { Calendar, CalendarEvent, CalendarEventEditMode, CalendarSettings, CalendarWeekday } from 'app/modules/admin/apps/calendar/calendar.types'; - -@Injectable({ - providedIn: 'root' -}) -export class CalendarService -{ - // Private - private _calendars: BehaviorSubject = new BehaviorSubject(null); - private _events: BehaviorSubject = new BehaviorSubject(null); - private _loadedEventsRange: { start: Moment | null, end: Moment | null } = { - start: null, - end : null - }; - private readonly _numberOfDaysToPrefetch = 60; - private _settings: BehaviorSubject = new BehaviorSubject(null); - private _weekdays: BehaviorSubject = new BehaviorSubject(null); - - /** - * Constructor - */ - constructor(private _httpClient: HttpClient) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Accessors - // ----------------------------------------------------------------------------------------------------- - - /** - * Getter for calendars - */ - get calendars$(): Observable - { - return this._calendars.asObservable(); - } - - /** - * Getter for events - */ - get events$(): Observable - { - return this._events.asObservable(); - } - - /** - * Getter for settings - */ - get settings$(): Observable - { - return this._settings.asObservable(); - } - - /** - * Getter for weekdays - */ - get weekdays$(): Observable - { - return this._weekdays.asObservable(); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Get calendars - */ - getCalendars(): Observable - { - return this._httpClient.get('api/apps/calendar/calendars').pipe( - tap((response) => { - this._calendars.next(response); - }) - ); - } - - /** - * Add calendar - * - * @param calendar - */ - addCalendar(calendar: Calendar): Observable - { - return this.calendars$.pipe( - take(1), - switchMap(calendars => this._httpClient.post('api/apps/calendar/calendars', { - calendar - }).pipe( - map((addedCalendar) => { - - // Add the calendar - calendars.push(addedCalendar); - - // Update the calendars - this._calendars.next(calendars); - - // Return the added calendar - return addedCalendar; - }) - )) - ); - } - - /** - * Update calendar - * - * @param id - * @param calendar - */ - updateCalendar(id: string, calendar: Calendar): Observable - { - return this.calendars$.pipe( - take(1), - switchMap(calendars => this._httpClient.patch('api/apps/calendar/calendars', { - id, - calendar - }).pipe( - map((updatedCalendar) => { - - // Find the index of the updated calendar - const index = calendars.findIndex(item => item.id === id); - - // Update the calendar - calendars[index] = updatedCalendar; - - // Update the calendars - this._calendars.next(calendars); - - // Return the updated calendar - return updatedCalendar; - }) - )) - ); - } - - /** - * Delete calendar - * - * @param id - */ - deleteCalendar(id: string): Observable - { - return this.calendars$.pipe( - take(1), - switchMap(calendars => this._httpClient.delete('api/apps/calendar/calendars', { - params: {id} - }).pipe( - map((isDeleted) => { - - // Find the index of the deleted calendar - const index = calendars.findIndex(item => item.id === id); - - // Delete the calendar - calendars.splice(index, 1); - - // Update the calendars - this._calendars.next(calendars); - - // Remove the events belong to deleted calendar - const events = this._events.value.filter((event) => event.calendarId !== id); - - // Update the events - this._events.next(events); - - // Return the deleted status - return isDeleted; - }) - )) - ); - } - - /** - * Get events - * - * @param start - * @param end - * @param replace - */ - getEvents(start: Moment, end: Moment, replace = false): Observable - { - // Set the new start date for loaded events - if ( replace || !this._loadedEventsRange.start || start.isBefore(this._loadedEventsRange.start) ) - { - this._loadedEventsRange.start = start; - } - - // Set the new end date for loaded events - if ( replace || !this._loadedEventsRange.end || end.isAfter(this._loadedEventsRange.end) ) - { - this._loadedEventsRange.end = end; - } - - // Get the events - return this._httpClient.get('api/apps/calendar/events', { - params: { - start: start.toISOString(true), - end : end.toISOString(true) - } - }).pipe( - switchMap(response => this._events.pipe( - take(1), - map((events) => { - - // If replace... - if ( replace ) - { - // Execute the observable with the response replacing the events object - this._events.next(response); - } - // Otherwise... - else - { - // If events is null, replace it with an empty array - events = events || []; - - // Execute the observable by appending the response to the current events - this._events.next([...events, ...response]); - } - - // Return the response - return response; - }) - )) - ); - } - - /** - * Reload events using the loaded events range - */ - reloadEvents(): Observable - { - // Get the events - return this._httpClient.get('api/apps/calendar/events', { - params: { - start: this._loadedEventsRange.start.toISOString(), - end : this._loadedEventsRange.end.toISOString() - } - }).pipe( - map((response) => { - - // Execute the observable with the response replacing the events object - this._events.next(response); - - // Return the response - return response; - }) - ); - } - - /** - * Prefetch future events - * - * @param end - */ - prefetchFutureEvents(end: Moment): Observable - { - // Calculate the remaining prefetched days - const remainingDays = this._loadedEventsRange.end.diff(end, 'days'); - - // Return if remaining days is bigger than the number - // of days to prefetch. This means we were already been - // there and fetched the events mock-api so no need for doing - // it again. - if ( remainingDays >= this._numberOfDaysToPrefetch ) - { - return of([]); - } - - // Figure out the start and end dates - const start = this._loadedEventsRange.end.clone().add(1, 'day'); - end = this._loadedEventsRange.end.clone().add(this._numberOfDaysToPrefetch - remainingDays, 'days'); - - // Prefetch the events - return this.getEvents(start, end); - } - - /** - * Prefetch past events - * - * @param start - */ - prefetchPastEvents(start: Moment): Observable - { - // Calculate the remaining prefetched days - const remainingDays = start.diff(this._loadedEventsRange.start, 'days'); - - // Return if remaining days is bigger than the number - // of days to prefetch. This means we were already been - // there and fetched the events mock-api so no need for doing - // it again. - if ( remainingDays >= this._numberOfDaysToPrefetch ) - { - return of([]); - } - - // Figure out the start and end dates - start = this._loadedEventsRange.start.clone().subtract(this._numberOfDaysToPrefetch - remainingDays, 'days'); - const end = this._loadedEventsRange.start.clone().subtract(1, 'day'); - - // Prefetch the events - return this.getEvents(start, end); - } - - /** - * Add event - * - * @param event - */ - addEvent(event): Observable - { - return this.events$.pipe( - take(1), - switchMap(events => this._httpClient.post('api/apps/calendar/event', { - event - }).pipe( - map((addedEvent) => { - - // Update the events - this._events.next(events); - - // Return the added event - return addedEvent; - }) - )) - ); - } - - /** - * Update event - * - * @param id - * @param event - */ - updateEvent(id: string, event): Observable - { - return this.events$.pipe( - take(1), - switchMap(events => this._httpClient.patch('api/apps/calendar/event', { - id, - event - }).pipe( - map((updatedEvent) => { - - // Find the index of the updated event - const index = events.findIndex(item => item.id === id); - - // Update the event - events[index] = updatedEvent; - - // Update the events - this._events.next(events); - - // Return the updated event - return updatedEvent; - }) - )) - ); - } - - /** - * Update recurring event - * - * @param event - * @param originalEvent - * @param mode - */ - updateRecurringEvent(event, originalEvent, mode: CalendarEventEditMode): Observable - { - return this._httpClient.patch('api/apps/calendar/recurring-event', { - event, - originalEvent, - mode - }); - } - - /** - * Delete event - * - * @param id - */ - deleteEvent(id: string): Observable - { - return this.events$.pipe( - take(1), - switchMap(events => this._httpClient.delete('api/apps/calendar/event', {params: {id}}).pipe( - map((isDeleted) => { - - // Find the index of the deleted event - const index = events.findIndex(item => item.id === id); - - // Delete the event - events.splice(index, 1); - - // Update the events - this._events.next(events); - - // Return the deleted status - return isDeleted; - }) - )) - ); - } - - /** - * Delete recurring event - * - * @param event - * @param mode - */ - deleteRecurringEvent(event, mode: CalendarEventEditMode): Observable - { - return this._httpClient.delete('api/apps/calendar/recurring-event', { - params: { - event: JSON.stringify(event), - mode - } - }); - } - - /** - * Get settings - */ - getSettings(): Observable - { - return this._httpClient.get('api/apps/calendar/settings').pipe( - tap((response) => { - this._settings.next(response); - }) - ); - } - - /** - * Update settings - */ - updateSettings(settings: CalendarSettings): Observable - { - return this.events$.pipe( - take(1), - switchMap(events => this._httpClient.patch('api/apps/calendar/settings', { - settings - }).pipe( - map((updatedSettings) => { - - // Update the settings - this._settings.next(settings); - - // Get weekdays again to get them in correct order - // in case the startWeekOn setting changes - this.getWeekdays().subscribe(); - - // Return the updated settings - return updatedSettings; - }) - )) - ); - } - - /** - * Get weekdays - */ - getWeekdays(): Observable - { - return this._httpClient.get('api/apps/calendar/weekdays').pipe( - tap((response) => { - this._weekdays.next(response); - }) - ); - } -} diff --git a/src/app/modules/admin/apps/calendar/calendar.types.ts b/src/app/modules/admin/apps/calendar/calendar.types.ts deleted file mode 100644 index ff79255c..00000000 --- a/src/app/modules/admin/apps/calendar/calendar.types.ts +++ /dev/null @@ -1,47 +0,0 @@ -export interface Calendar -{ - id: string; - title: string; - color: string; - visible: boolean; -} - -export type CalendarDrawerMode = 'over' | 'side'; - -export interface CalendarEvent -{ - id: string; - calendarId: string; - recurringEventId: string | null; - isFirstInstance: boolean; - title: string; - description: string; - start: string | null; - end: string | null; - allDay: boolean; - recurrence: string; -} - -export interface CalendarEventException -{ - id: string; - eventId: string; - exdate: string; -} - -export type CalendarEventPanelMode = 'view' | 'add' | 'edit'; -export type CalendarEventEditMode = 'single' | 'future' | 'all'; - -export interface CalendarSettings -{ - dateFormat: 'DD/MM/YYYY' | 'MM/DD/YYYY' | 'YYYY-MM-DD' | 'll'; - timeFormat: '12' | '24'; - startWeekOn: 6 | 0 | 1; -} - -export interface CalendarWeekday -{ - abbr: string; - label: string; - value: string; -} diff --git a/src/app/modules/admin/apps/calendar/recurrence/recurrence.component.html b/src/app/modules/admin/apps/calendar/recurrence/recurrence.component.html deleted file mode 100644 index 730d38ea..00000000 --- a/src/app/modules/admin/apps/calendar/recurrence/recurrence.component.html +++ /dev/null @@ -1,120 +0,0 @@ -
- -
Recurrence rules
- - -
- - Repeat every - - - - - day(s) - week(s) - month(s) - year(s) - - -
- - -
-
Repeat on
- - - {{weekday.abbr}} - - -
- - -
- - Repeat on - - Monthly on day {{recurrenceForm.get('monthly.date').value}} - Monthly on the {{nthWeekdayText}} - - -
- - -
-
- - Ends - - Never - On - After - - - - - - - - - - occurrence(s) - -
-
- - -
- - -
- -
diff --git a/src/app/modules/admin/apps/calendar/recurrence/recurrence.component.ts b/src/app/modules/admin/apps/calendar/recurrence/recurrence.component.ts deleted file mode 100644 index c5abd23e..00000000 --- a/src/app/modules/admin/apps/calendar/recurrence/recurrence.component.ts +++ /dev/null @@ -1,341 +0,0 @@ -import { Component, Inject, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; -import * as moment from 'moment'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import { CalendarService } from 'app/modules/admin/apps/calendar/calendar.service'; -import { CalendarWeekday } from 'app/modules/admin/apps/calendar/calendar.types'; - -@Component({ - selector : 'calendar-recurrence', - templateUrl : './recurrence.component.html', - encapsulation: ViewEncapsulation.None -}) -export class CalendarRecurrenceComponent implements OnInit, OnDestroy -{ - nthWeekdayText: string; - recurrenceForm: FormGroup; - recurrenceFormValues: any; - weekdays: CalendarWeekday[]; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor( - @Inject(MAT_DIALOG_DATA) public data: any, - public matDialogRef: MatDialogRef, - private _calendarService: CalendarService, - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Get weekdays - this._calendarService.weekdays$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((weekdays) => { - - // Store the weekdays - this.weekdays = weekdays; - }); - - // Initialize - this._init(); - - // Create the recurrence form - this.recurrenceForm = this._formBuilder.group({ - freq : [null], - interval: [null, Validators.required], - weekly : this._formBuilder.group({ - byDay: [[]] - }), - monthly : this._formBuilder.group({ - repeatOn : [null], // date | nthWeekday - date : [null], - nthWeekday: [null] - }), - end : this._formBuilder.group({ - type : [null], // never | until | count - until: [null], - count: [null] - }) - }); - - // Subscribe to 'freq' field value changes - this.recurrenceForm.get('freq').valueChanges.subscribe((value) => { - - // Set the end values - this._setEndValues(value); - }); - - // Subscribe to 'weekly.byDay' field value changes - this.recurrenceForm.get('weekly.byDay').valueChanges.subscribe((value) => { - - // Get the event's start date - const startDate = moment(this.data.event.start); - - // If nothing is selected, select the original value from - // the event form to prevent an empty value on the field - if ( !value || !value.length ) - { - // Get the day of event start date - const eventStartDay = startDate.format('dd').toUpperCase(); - - // Set the original value back without emitting a - // change event to prevent an infinite loop - this.recurrenceForm.get('weekly.byDay').setValue([eventStartDay], {emitEvent: false}); - } - }); - - // Patch the form with the values - this.recurrenceForm.patchValue(this.recurrenceFormValues); - - // Set end values for the first time - this._setEndValues(this.recurrenceForm.get('freq').value); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Clear - */ - clear(): void - { - // Close the dialog - this.matDialogRef.close({recurrence: 'cleared'}); - } - - /** - * Done - */ - done(): void - { - // Get the recurrence form values - const recurrenceForm = this.recurrenceForm.value; - - // Prepare the rule array and add the base rules - const ruleArr = ['FREQ=' + recurrenceForm.freq, 'INTERVAL=' + recurrenceForm.interval]; - - // If monthly on certain days... - if ( recurrenceForm.freq === 'MONTHLY' && recurrenceForm.monthly.repeatOn === 'nthWeekday' ) - { - ruleArr.push('BYDAY=' + recurrenceForm.monthly.nthWeekday); - } - - // If weekly... - if ( recurrenceForm.freq === 'WEEKLY' ) - { - // If byDay is an array... - if ( Array.isArray(recurrenceForm.weekly.byDay) ) - { - ruleArr.push('BYDAY=' + recurrenceForm.weekly.byDay.join(',')); - } - // Otherwise - else - { - ruleArr.push('BYDAY=' + recurrenceForm.weekly.byDay); - } - } - - // If one of the end options is selected... - if ( recurrenceForm.end.type === 'until' ) - { - ruleArr.push('UNTIL=' + moment(recurrenceForm.end.until).endOf('day').utc().format('YYYYMMDD[T]HHmmss[Z]')); - } - - if ( recurrenceForm.end.type === 'count' ) - { - ruleArr.push('COUNT=' + recurrenceForm.end.count); - } - - // Generate rule text - const ruleText = ruleArr.join(';'); - - // Close the dialog - this.matDialogRef.close({recurrence: ruleText}); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Private methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Initialize - * - * @private - */ - private _init(): void - { - // Get the event's start date - const startDate = moment(this.data.event.start); - - // Calculate the weekday - const weekday = moment(this.data.event.start).format('dd').toUpperCase(); - - // Calculate the nthWeekday - let nthWeekdayNo = 1; - while ( startDate.clone().isSame(startDate.clone().subtract(nthWeekdayNo, 'week'), 'month') ) - { - nthWeekdayNo++; - } - const nthWeekday = nthWeekdayNo + weekday; - - // Calculate the nthWeekday as text - const ordinalNumberSuffixes = { - 1: 'st', - 2: 'nd', - 3: 'rd', - 4: 'th', - 5: 'th' - }; - this.nthWeekdayText = nthWeekday.slice(0, 1) + ordinalNumberSuffixes[nthWeekday.slice(0, 1)] + ' ' + - this.weekdays.find((item) => item.value === nthWeekday.slice(-2)).label; - - // Set the defaults on recurrence form values - this.recurrenceFormValues = { - freq : 'DAILY', - interval: 1, - weekly : { - byDay: weekday - }, - monthly : { - repeatOn : 'date', - date : moment(this.data.event.start).date(), - nthWeekday: nthWeekday - }, - end : { - type : 'never', - until: null, - count: null - } - }; - - // If recurrence rule string is available on the - // event meaning that the is a recurring one... - if ( this.data.event.recurrence ) - { - // Parse the rules - const parsedRules: any = {}; - this.data.event.recurrence.split(';').forEach((rule) => { - parsedRules[rule.split('=')[0]] = rule.split('=')[1]; - }); - - // Overwrite the recurrence form values - this.recurrenceFormValues.freq = parsedRules.FREQ; - this.recurrenceFormValues.interval = parsedRules.INTERVAL; - - if ( parsedRules.FREQ === 'WEEKLY' ) - { - this.recurrenceFormValues.weekly.byDay = parsedRules.BYDAY.split(','); - } - - if ( parsedRules.FREQ === 'MONTHLY' ) - { - this.recurrenceFormValues.monthly.repeatOn = parsedRules.BYDAY ? 'nthWeekday' : 'date'; - } - - this.recurrenceFormValues.end.type = parsedRules.UNTIL ? 'until' : (parsedRules.COUNT ? 'count' : 'never'); - this.recurrenceFormValues.end.until = parsedRules.UNTIL || null; - this.recurrenceFormValues.end.count = parsedRules.COUNT || null; - } - } - - /** - * Set the end value based on frequency - * - * @param freq - * @private - */ - private _setEndValues(freq: string): void - { - // Return if freq is not available - if ( !freq ) - { - return; - } - - // Get the event's start date - const startDate = moment(this.data.event.startDate); - - // Get the end type - const endType = this.recurrenceForm.get('end.type').value; - - // If until is not selected - if ( endType !== 'until' ) - { - let until; - - // Change the until's default value based on the frequency - if ( freq === 'DAILY' ) - { - until = startDate.clone().add(1, 'month').toISOString(); - } - - if ( freq === 'WEEKLY' ) - { - until = startDate.clone().add(12, 'weeks').toISOString(); - } - - if ( freq === 'MONTHLY' ) - { - until = startDate.clone().add(12, 'months').toISOString(); - } - - if ( freq === 'YEARLY' ) - { - until = startDate.clone().add(5, 'years').toISOString(); - } - - // Set the until - this.recurrenceForm.get('end.until').setValue(until); - } - - // If count is not selected... - if ( endType !== 'count' ) - { - let count; - - // Change the count's default value based on the frequency - if ( freq === 'DAILY' ) - { - count = 30; - } - - if ( freq === 'WEEKLY' || freq === 'MONTHLY' ) - { - count = 12; - } - - if ( freq === 'YEARLY' ) - { - count = 5; - } - - // Set the count - this.recurrenceForm.get('end.count').setValue(count); - } - } -} diff --git a/src/app/modules/admin/apps/calendar/settings/settings.component.html b/src/app/modules/admin/apps/calendar/settings/settings.component.html deleted file mode 100644 index ba07ebbf..00000000 --- a/src/app/modules/admin/apps/calendar/settings/settings.component.html +++ /dev/null @@ -1,60 +0,0 @@ -
- - -
- - -
- - - -
Settings
-
- -
-
- - Date format - - Aug 20, {{year}} - 12/31/{{year}} - 31/12/{{year}} - {{year}}-12-31 - - - - - Time format - - 1:00pm - 13:30 - - - - - Start week on - - Saturday - Sunday - Monday - - - - -
-
-
-
diff --git a/src/app/modules/admin/apps/calendar/settings/settings.component.ts b/src/app/modules/admin/apps/calendar/settings/settings.component.ts deleted file mode 100644 index f0f62d43..00000000 --- a/src/app/modules/admin/apps/calendar/settings/settings.component.ts +++ /dev/null @@ -1,96 +0,0 @@ -import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup } from '@angular/forms'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import { CalendarService } from 'app/modules/admin/apps/calendar/calendar.service'; - -@Component({ - selector : 'calendar-settings', - templateUrl : './settings.component.html', - changeDetection: ChangeDetectionStrategy.OnPush, - encapsulation : ViewEncapsulation.None -}) -export class CalendarSettingsComponent implements OnInit, OnDestroy -{ - settingsForm: FormGroup; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor( - private _calendarService: CalendarService, - private _changeDetectorRef: ChangeDetectorRef, - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Accessors - // ----------------------------------------------------------------------------------------------------- - - /** - * Getter for current year - */ - get year(): string - { - return new Date().getFullYear().toString(); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the event form - this.settingsForm = this._formBuilder.group({ - dateFormat : [''], - timeFormat : [''], - startWeekOn: [''] - }); - - // Get settings - this._calendarService.settings$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((settings) => { - - // Fill the settings form - this.settingsForm.patchValue(settings); - - // Mark for check - this._changeDetectorRef.markForCheck(); - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - updateSettings(): void - { - // Get the settings - const settings = this.settingsForm.value; - - // Update the settings on the server - this._calendarService.updateSettings(settings).subscribe((updatedSettings) => { - - // Reset the form with the updated settings - this.settingsForm.reset(updatedSettings); - }); - } -} diff --git a/src/app/modules/admin/apps/calendar/sidebar/calendar-colors.ts b/src/app/modules/admin/apps/calendar/sidebar/calendar-colors.ts deleted file mode 100644 index 3d4ec0d0..00000000 --- a/src/app/modules/admin/apps/calendar/sidebar/calendar-colors.ts +++ /dev/null @@ -1,12 +0,0 @@ -export const calendarColors = [ - 'bg-gray-500', - 'bg-red-500', - 'bg-orange-500', - 'bg-yellow-500', - 'bg-green-500', - 'bg-teal-500', - 'bg-blue-500', - 'bg-indigo-500', - 'bg-purple-500', - 'bg-pink-500' -]; diff --git a/src/app/modules/admin/apps/calendar/sidebar/sidebar.component.html b/src/app/modules/admin/apps/calendar/sidebar/sidebar.component.html deleted file mode 100644 index c3e4eba1..00000000 --- a/src/app/modules/admin/apps/calendar/sidebar/sidebar.component.html +++ /dev/null @@ -1,116 +0,0 @@ -
-
Calendar
- - -
- Calendars - -
-
-
- - - {{calendar.title}} -
- -
- - - - - - -
-
- Add calendar - Edit calendar -
-
- - - - - - -
Calendar color
-
- - - - -
-
-
-
- - -
- - - - -
-
-
-
diff --git a/src/app/modules/admin/apps/calendar/sidebar/sidebar.component.ts b/src/app/modules/admin/apps/calendar/sidebar/sidebar.component.ts deleted file mode 100644 index 03bf404e..00000000 --- a/src/app/modules/admin/apps/calendar/sidebar/sidebar.component.ts +++ /dev/null @@ -1,217 +0,0 @@ -import { Component, EventEmitter, OnDestroy, OnInit, Output, TemplateRef, ViewChild, ViewContainerRef, ViewEncapsulation } from '@angular/core'; -import { Overlay, OverlayRef } from '@angular/cdk/overlay'; -import { TemplatePortal } from '@angular/cdk/portal'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import { cloneDeep } from 'lodash-es'; -import { Calendar } from 'app/modules/admin/apps/calendar/calendar.types'; -import { CalendarService } from 'app/modules/admin/apps/calendar/calendar.service'; -import { calendarColors } from 'app/modules/admin/apps/calendar/sidebar/calendar-colors'; - -@Component({ - selector : 'calendar-sidebar', - templateUrl : './sidebar.component.html', - encapsulation: ViewEncapsulation.None -}) -export class CalendarSidebarComponent implements OnInit, OnDestroy -{ - @ViewChild('editPanel') private _editPanel: TemplateRef; - @Output() readonly calendarUpdated: EventEmitter = new EventEmitter(); - - calendar: Calendar | null; - calendarColors: any = calendarColors; - calendars: Calendar[]; - private _editPanelOverlayRef: OverlayRef; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor( - private _calendarService: CalendarService, - private _overlay: Overlay, - private _viewContainerRef: ViewContainerRef - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Get calendars - this._calendarService.calendars$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((calendars) => { - - // Store the calendars - this.calendars = calendars; - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - - // Dispose the overlay - if ( this._editPanelOverlayRef ) - { - this._editPanelOverlayRef.dispose(); - } - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Open edit panel - */ - openEditPanel(calendar: Calendar): void - { - // Set the calendar - this.calendar = cloneDeep(calendar); - - // Create the overlay if it doesn't exist - if ( !this._editPanelOverlayRef ) - { - this._createEditPanelOverlay(); - } - - // Attach the portal to the overlay - this._editPanelOverlayRef.attach(new TemplatePortal(this._editPanel, this._viewContainerRef)); - } - - /** - * Close the edit panel - */ - closeEditPanel(): void - { - // Detach the overlay from the portal - if ( this._editPanelOverlayRef ) - { - this._editPanelOverlayRef.detach(); - } - } - - /** - * Toggle the calendar visibility - * - * @param calendar - */ - toggleCalendarVisibility(calendar: Calendar): void - { - // Toggle the visibility - calendar.visible = !calendar.visible; - - // Update the calendar - this.saveCalendar(calendar); - } - - /** - * Add calendar - */ - addCalendar(): void - { - // Create a new calendar with default values - const calendar = { - id : null, - title : '', - color : 'bg-blue-500', - visible: true - }; - - // Open the edit panel - this.openEditPanel(calendar); - } - - /** - * Save the calendar - * - * @param calendar - */ - saveCalendar(calendar: Calendar): void - { - // If there is no id on the calendar... - if ( !calendar.id ) - { - // Add calendar to the server - this._calendarService.addCalendar(calendar).subscribe(() => { - - // Close the edit panel - this.closeEditPanel(); - - // Emit the calendarUpdated event - this.calendarUpdated.emit(); - }); - } - // Otherwise... - else - { - // Update the calendar on the server - this._calendarService.updateCalendar(calendar.id, calendar).subscribe(() => { - - // Close the edit panel - this.closeEditPanel(); - - // Emit the calendarUpdated event - this.calendarUpdated.emit(); - }); - } - } - - /** - * Delete the calendar - * - * @param calendar - */ - deleteCalendar(calendar: Calendar): void - { - // Delete the calendar on the server - this._calendarService.deleteCalendar(calendar.id).subscribe(() => { - - // Close the edit panel - this.closeEditPanel(); - - // Emit the calendarUpdated event - this.calendarUpdated.emit(); - }); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Private methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Create the edit panel overlay - * @private - */ - private _createEditPanelOverlay(): void - { - // Create the overlay - this._editPanelOverlayRef = this._overlay.create({ - hasBackdrop : true, - scrollStrategy : this._overlay.scrollStrategies.reposition(), - positionStrategy: this._overlay.position() - .global() - .centerHorizontally() - .centerVertically() - }); - - // Detach the overlay from the portal on backdrop click - this._editPanelOverlayRef.backdropClick().subscribe(() => { - this.closeEditPanel(); - this.calendar = null; - }); - } -} diff --git a/src/app/modules/admin/apps/contacts/contacts.component.html b/src/app/modules/admin/apps/contacts/contacts.component.html deleted file mode 100644 index 0680b43f..00000000 --- a/src/app/modules/admin/apps/contacts/contacts.component.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/app/modules/admin/apps/contacts/contacts.component.ts b/src/app/modules/admin/apps/contacts/contacts.component.ts deleted file mode 100644 index 52bd4292..00000000 --- a/src/app/modules/admin/apps/contacts/contacts.component.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core'; - -@Component({ - selector : 'contacts', - templateUrl : './contacts.component.html', - encapsulation : ViewEncapsulation.None, - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class ContactsComponent -{ - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/apps/contacts/contacts.guards.ts b/src/app/modules/admin/apps/contacts/contacts.guards.ts deleted file mode 100644 index e6cf5e8f..00000000 --- a/src/app/modules/admin/apps/contacts/contacts.guards.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { Injectable } from '@angular/core'; -import { ActivatedRouteSnapshot, CanDeactivate, RouterStateSnapshot, UrlTree } from '@angular/router'; -import { Observable } from 'rxjs'; -import { ContactsDetailsComponent } from 'app/modules/admin/apps/contacts/details/details.component'; - -@Injectable({ - providedIn: 'root' -}) -export class CanDeactivateContactsDetails implements CanDeactivate -{ - canDeactivate( - component: ContactsDetailsComponent, - currentRoute: ActivatedRouteSnapshot, - currentState: RouterStateSnapshot, - nextState: RouterStateSnapshot - ): Observable | Promise | boolean | UrlTree - { - // Get the next route - let nextRoute: ActivatedRouteSnapshot = nextState.root; - while ( nextRoute.firstChild ) - { - nextRoute = nextRoute.firstChild; - } - - // If the next state doesn't contain '/contacts' - // it means we are navigating away from the - // contacts app - if ( !nextState.url.includes('/contacts') ) - { - // Let it navigate - return true; - } - - // If we are navigating to another contact... - if ( nextRoute.paramMap.get('id') ) - { - // Just navigate - return true; - } - // Otherwise... - else - { - // Close the drawer first, and then navigate - return component.closeDrawer().then(() => { - return true; - }); - } - } -} diff --git a/src/app/modules/admin/apps/contacts/contacts.module.ts b/src/app/modules/admin/apps/contacts/contacts.module.ts deleted file mode 100644 index bfbebc32..00000000 --- a/src/app/modules/admin/apps/contacts/contacts.module.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { MatButtonModule } from '@angular/material/button'; -import { MatCheckboxModule } from '@angular/material/checkbox'; -import { MAT_DATE_FORMATS, MatRippleModule } from '@angular/material/core'; -import { MatDatepickerModule } from '@angular/material/datepicker'; -import { MatDividerModule } from '@angular/material/divider'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatIconModule } from '@angular/material/icon'; -import { MatInputModule } from '@angular/material/input'; -import { MatMenuModule } from '@angular/material/menu'; -import { MatMomentDateModule } from '@angular/material-moment-adapter'; -import { MatProgressBarModule } from '@angular/material/progress-bar'; -import { MatRadioModule } from '@angular/material/radio'; -import { MatSelectModule } from '@angular/material/select'; -import { MatSidenavModule } from '@angular/material/sidenav'; -import { MatTableModule } from '@angular/material/table'; -import { MatTooltipModule } from '@angular/material/tooltip'; -import * as moment from 'moment'; -import { FuseAutogrowModule } from '@fuse/directives/autogrow'; -import { FuseFindByKeyPipeModule } from '@fuse/pipes/find-by-key'; -import { SharedModule } from 'app/shared/shared.module'; -import { contactsRoutes } from 'app/modules/admin/apps/contacts/contacts.routing'; -import { ContactsComponent } from 'app/modules/admin/apps/contacts/contacts.component'; -import { ContactsDetailsComponent } from 'app/modules/admin/apps/contacts/details/details.component'; -import { ContactsListComponent } from 'app/modules/admin/apps/contacts/list/list.component'; - -@NgModule({ - declarations: [ - ContactsComponent, - ContactsListComponent, - ContactsDetailsComponent - ], - imports : [ - RouterModule.forChild(contactsRoutes), - MatButtonModule, - MatCheckboxModule, - MatDatepickerModule, - MatDividerModule, - MatFormFieldModule, - MatIconModule, - MatInputModule, - MatMenuModule, - MatMomentDateModule, - MatProgressBarModule, - MatRadioModule, - MatRippleModule, - MatSelectModule, - MatSidenavModule, - MatTableModule, - MatTooltipModule, - FuseAutogrowModule, - FuseFindByKeyPipeModule, - SharedModule - ], - providers : [ - { - provide : MAT_DATE_FORMATS, - useValue: { - parse : { - dateInput: moment.ISO_8601 - }, - display: { - dateInput : 'LL', - monthYearLabel : 'MMM YYYY', - dateA11yLabel : 'LL', - monthYearA11yLabel: 'MMMM YYYY' - } - } - } - ] -}) -export class ContactsModule -{ -} diff --git a/src/app/modules/admin/apps/contacts/contacts.resolvers.ts b/src/app/modules/admin/apps/contacts/contacts.resolvers.ts deleted file mode 100644 index 89ad16fd..00000000 --- a/src/app/modules/admin/apps/contacts/contacts.resolvers.ts +++ /dev/null @@ -1,138 +0,0 @@ -import { Injectable } from '@angular/core'; -import { ActivatedRouteSnapshot, Resolve, Router, RouterStateSnapshot } from '@angular/router'; -import { Observable, throwError } from 'rxjs'; -import { catchError } from 'rxjs/operators'; -import { ContactsService } from 'app/modules/admin/apps/contacts/contacts.service'; -import { Contact, Country, Tag } from 'app/modules/admin/apps/contacts/contacts.types'; - -@Injectable({ - providedIn: 'root' -}) -export class ContactsResolver implements Resolve -{ - /** - * Constructor - */ - constructor(private _contactsService: ContactsService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Resolver - * - * @param route - * @param state - */ - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable - { - return this._contactsService.getContacts(); - } -} - -@Injectable({ - providedIn: 'root' -}) -export class ContactsContactResolver implements Resolve -{ - /** - * Constructor - */ - constructor( - private _contactsService: ContactsService, - private _router: Router - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Resolver - * - * @param route - * @param state - */ - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable - { - return this._contactsService.getContactById(route.paramMap.get('id')) - .pipe( - // Error here means the requested contact is not available - catchError((error) => { - - // Log the error - console.error(error); - - // Get the parent url - const parentUrl = state.url.split('/').slice(0, -1).join('/'); - - // Navigate to there - this._router.navigateByUrl(parentUrl); - - // Throw an error - return throwError(error); - }) - ); - } -} - -@Injectable({ - providedIn: 'root' -}) -export class ContactsCountriesResolver implements Resolve -{ - /** - * Constructor - */ - constructor(private _contactsService: ContactsService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Resolver - * - * @param route - * @param state - */ - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable - { - return this._contactsService.getCountries(); - } -} - -@Injectable({ - providedIn: 'root' -}) -export class ContactsTagsResolver implements Resolve -{ - /** - * Constructor - */ - constructor(private _contactsService: ContactsService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Resolver - * - * @param route - * @param state - */ - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable - { - return this._contactsService.getTags(); - } -} diff --git a/src/app/modules/admin/apps/contacts/contacts.routing.ts b/src/app/modules/admin/apps/contacts/contacts.routing.ts deleted file mode 100644 index 8b00b89c..00000000 --- a/src/app/modules/admin/apps/contacts/contacts.routing.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Route } from '@angular/router'; -import { CanDeactivateContactsDetails } from 'app/modules/admin/apps/contacts/contacts.guards'; -import { ContactsContactResolver, ContactsCountriesResolver, ContactsResolver, ContactsTagsResolver } from 'app/modules/admin/apps/contacts/contacts.resolvers'; -import { ContactsComponent } from 'app/modules/admin/apps/contacts/contacts.component'; -import { ContactsListComponent } from 'app/modules/admin/apps/contacts/list/list.component'; -import { ContactsDetailsComponent } from 'app/modules/admin/apps/contacts/details/details.component'; - -export const contactsRoutes: Route[] = [ - { - path : '', - component: ContactsComponent, - resolve : { - tags: ContactsTagsResolver - }, - children : [ - { - path : '', - component: ContactsListComponent, - resolve : { - tasks : ContactsResolver, - countries: ContactsCountriesResolver - }, - children : [ - { - path : ':id', - component : ContactsDetailsComponent, - resolve : { - task : ContactsContactResolver, - countries: ContactsCountriesResolver - }, - canDeactivate: [CanDeactivateContactsDetails] - } - ] - } - ] - } -]; diff --git a/src/app/modules/admin/apps/contacts/contacts.service.ts b/src/app/modules/admin/apps/contacts/contacts.service.ts deleted file mode 100644 index cf38779c..00000000 --- a/src/app/modules/admin/apps/contacts/contacts.service.ts +++ /dev/null @@ -1,389 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient } from '@angular/common/http'; -import { BehaviorSubject, Observable, of, throwError } from 'rxjs'; -import { filter, map, switchMap, take, tap } from 'rxjs/operators'; -import { Contact, Country, Tag } from 'app/modules/admin/apps/contacts/contacts.types'; - -@Injectable({ - providedIn: 'root' -}) -export class ContactsService -{ - // Private - private _contact: BehaviorSubject = new BehaviorSubject(null); - private _contacts: BehaviorSubject = new BehaviorSubject(null); - private _countries: BehaviorSubject = new BehaviorSubject(null); - private _tags: BehaviorSubject = new BehaviorSubject(null); - - /** - * Constructor - */ - constructor(private _httpClient: HttpClient) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Accessors - // ----------------------------------------------------------------------------------------------------- - - /** - * Getter for contact - */ - get contact$(): Observable - { - return this._contact.asObservable(); - } - - /** - * Getter for contacts - */ - get contacts$(): Observable - { - return this._contacts.asObservable(); - } - - /** - * Getter for countries - */ - get countries$(): Observable - { - return this._countries.asObservable(); - } - - /** - * Getter for tags - */ - get tags$(): Observable - { - return this._tags.asObservable(); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Get contacts - */ - getContacts(): Observable - { - return this._httpClient.get('api/apps/contacts/all').pipe( - tap((contacts) => { - this._contacts.next(contacts); - }) - ); - } - - /** - * Search contacts with given query - * - * @param query - */ - searchContacts(query: string): Observable - { - return this._httpClient.get('api/apps/contacts/search', { - params: {query} - }).pipe( - tap((contacts) => { - this._contacts.next(contacts); - }) - ); - } - - /** - * Get contact by id - */ - getContactById(id: string): Observable - { - return this._contacts.pipe( - take(1), - map((contacts) => { - - // Find the contact - const contact = contacts.find(item => item.id === id) || null; - - // Update the contact - this._contact.next(contact); - - // Return the contact - return contact; - }), - switchMap((contact) => { - - if ( !contact ) - { - return throwError('Could not found contact with id of ' + id + '!'); - } - - return of(contact); - }) - ); - } - - /** - * Create contact - */ - createContact(): Observable - { - return this.contacts$.pipe( - take(1), - switchMap((contacts) => this._httpClient.post('api/apps/contacts/contact', {}).pipe( - map((newContact) => { - - // Update the contacts with the new contact - this._contacts.next([newContact, ...contacts]); - - // Return the new contact - return newContact; - }) - )) - ); - } - - /** - * Update contact - * - * @param id - * @param contact - */ - updateContact(id: string, contact: Contact): Observable - { - return this.contacts$.pipe( - take(1), - switchMap(contacts => this._httpClient.patch('api/apps/contacts/contact', { - id, - contact - }).pipe( - map((updatedContact) => { - - // Find the index of the updated contact - const index = contacts.findIndex(item => item.id === id); - - // Update the contact - contacts[index] = updatedContact; - - // Update the contacts - this._contacts.next(contacts); - - // Return the updated contact - return updatedContact; - }), - switchMap(updatedContact => this.contact$.pipe( - take(1), - filter(item => item && item.id === id), - tap(() => { - - // Update the contact if it's selected - this._contact.next(updatedContact); - - // Return the updated contact - return updatedContact; - }) - )) - )) - ); - } - - /** - * Delete the contact - * - * @param id - */ - deleteContact(id: string): Observable - { - return this.contacts$.pipe( - take(1), - switchMap(contacts => this._httpClient.delete('api/apps/contacts/contact', {params: {id}}).pipe( - map((isDeleted: boolean) => { - - // Find the index of the deleted contact - const index = contacts.findIndex(item => item.id === id); - - // Delete the contact - contacts.splice(index, 1); - - // Update the contacts - this._contacts.next(contacts); - - // Return the deleted status - return isDeleted; - }) - )) - ); - } - - /** - * Get countries - */ - getCountries(): Observable - { - return this._httpClient.get('api/apps/contacts/countries').pipe( - tap((countries) => { - this._countries.next(countries); - }) - ); - } - - /** - * Get tags - */ - getTags(): Observable - { - return this._httpClient.get('api/apps/contacts/tags').pipe( - tap((tags) => { - this._tags.next(tags); - }) - ); - } - - /** - * Create tag - * - * @param tag - */ - createTag(tag: Tag): Observable - { - return this.tags$.pipe( - take(1), - switchMap(tags => this._httpClient.post('api/apps/contacts/tag', {tag}).pipe( - map((newTag) => { - - // Update the tags with the new tag - this._tags.next([...tags, newTag]); - - // Return new tag from observable - return newTag; - }) - )) - ); - } - - /** - * Update the tag - * - * @param id - * @param tag - */ - updateTag(id: string, tag: Tag): Observable - { - return this.tags$.pipe( - take(1), - switchMap(tags => this._httpClient.patch('api/apps/contacts/tag', { - id, - tag - }).pipe( - map((updatedTag) => { - - // Find the index of the updated tag - const index = tags.findIndex(item => item.id === id); - - // Update the tag - tags[index] = updatedTag; - - // Update the tags - this._tags.next(tags); - - // Return the updated tag - return updatedTag; - }) - )) - ); - } - - /** - * Delete the tag - * - * @param id - */ - deleteTag(id: string): Observable - { - return this.tags$.pipe( - take(1), - switchMap(tags => this._httpClient.delete('api/apps/contacts/tag', {params: {id}}).pipe( - map((isDeleted: boolean) => { - - // Find the index of the deleted tag - const index = tags.findIndex(item => item.id === id); - - // Delete the tag - tags.splice(index, 1); - - // Update the tags - this._tags.next(tags); - - // Return the deleted status - return isDeleted; - }), - filter(isDeleted => isDeleted), - switchMap(isDeleted => this.contacts$.pipe( - take(1), - map((contacts) => { - - // Iterate through the contacts - contacts.forEach((contact) => { - - const tagIndex = contact.tags.findIndex(tag => tag === id); - - // If the contact has the tag, remove it - if ( tagIndex > -1 ) - { - contact.tags.splice(tagIndex, 1); - } - }); - - // Return the deleted status - return isDeleted; - }) - )) - )) - ); - } - - /** - * Update the avatar of the given contact - * - * @param id - * @param avatar - */ - uploadAvatar(id: string, avatar: File): Observable - { - return this.contacts$.pipe( - take(1), - switchMap(contacts => this._httpClient.post('api/apps/contacts/avatar', { - id, - avatar - }, { - headers: { - 'Content-Type': avatar.type - } - }).pipe( - map((updatedContact) => { - - // Find the index of the updated contact - const index = contacts.findIndex(item => item.id === id); - - // Update the contact - contacts[index] = updatedContact; - - // Update the contacts - this._contacts.next(contacts); - - // Return the updated contact - return updatedContact; - }), - switchMap(updatedContact => this.contact$.pipe( - take(1), - filter(item => item && item.id === id), - tap(() => { - - // Update the contact if it's selected - this._contact.next(updatedContact); - - // Return the updated contact - return updatedContact; - }) - )) - )) - ); - } -} diff --git a/src/app/modules/admin/apps/contacts/contacts.types.ts b/src/app/modules/admin/apps/contacts/contacts.types.ts deleted file mode 100644 index 8befb04b..00000000 --- a/src/app/modules/admin/apps/contacts/contacts.types.ts +++ /dev/null @@ -1,37 +0,0 @@ -export interface Contact -{ - id: string; - avatar?: string | null; - background?: string | null; - name: string; - emails?: { - email: string, - label: string - }[]; - phoneNumbers?: { - country: string; - number: string; - label: string - }[]; - title?: string; - company?: string; - birthday?: string | null; - address?: string | null; - notes?: string | null; - tags: string[]; -} - -export interface Country -{ - id: string; - iso: string; - name: string; - code: string; - flagImagePos: string; -} - -export interface Tag -{ - id?: string; - title?: string; -} diff --git a/src/app/modules/admin/apps/contacts/details/details.component.html b/src/app/modules/admin/apps/contacts/details/details.component.html deleted file mode 100644 index ecf5827e..00000000 --- a/src/app/modules/admin/apps/contacts/details/details.component.html +++ /dev/null @@ -1,641 +0,0 @@ -
- - - - - -
- - - - - -
- -
-
- - -
-
- - -
- -
- -
- {{contact.name.charAt(0)}} -
-
- -
- -
-
- - -
{{contact.name}}
- - - -
- - -
- {{tag.title}} -
-
-
-
- -
- - -
- -
{{contact.title}}
-
-
- - - -
- -
{{contact.company}}
-
-
- - - -
- -
- -
- - {{email.email}} - -
- - {{email.label}} -
-
-
-
-
-
- - - -
- -
- -
- -
{{getCountryByIso(phoneNumber.country).code}}
-
{{phoneNumber.number}}
-
- - {{phoneNumber.label}} -
-
-
-
-
-
- - - -
- -
{{contact.address}}
-
-
- - - -
- -
{{contact.birthday | date:'longDate'}}
-
-
- - - -
- -
-
-
-
- -
-
-
- - - - - -
- - - - - -
- -
-
- - -
-
-
- - -
-
- -
-
-
- - -
-
- -
-
- - -
- {{contact.name.charAt(0)}} -
-
-
- - -
- - Name - - - -
- - -
- - - -
- {{tag.title}} -
-
-
- -
- - - - Edit - - - - - Add - - - - -
- -
-
- -
- -
-
- -
-
- - -
- - -
{{tag.title}}
-
-
- - -
-
- - - - -
-
-
- -
- -
Create "{{newTagInput.value}}"
-
-
-
-
-
-
- - -
- - Title - - - -
- - -
- - Company - - - -
- - -
-
- -
- - Email - - - - - Label - - - - - -
- -
-
-
-
-
-
- - Add an email address -
-
- - -
-
- -
- - Phone - - - - - - {{getCountryByIso(phoneNumber.get('country').value).code}} - - - - - - {{country.name}} - {{country.code}} - - - - - - Label - - - - - -
- -
-
-
-
-
-
- - Add a phone number -
-
- - -
- - Address - - - -
- - -
- - Birthday - - - - - - -
- - -
- - Notes - - - -
- - -
- - - - - - -
- -
-
-
-
-
diff --git a/src/app/modules/admin/apps/contacts/details/details.component.ts b/src/app/modules/admin/apps/contacts/details/details.component.ts deleted file mode 100644 index 56c3c49b..00000000 --- a/src/app/modules/admin/apps/contacts/details/details.component.ts +++ /dev/null @@ -1,711 +0,0 @@ -import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, OnDestroy, OnInit, Renderer2, TemplateRef, ViewChild, ViewContainerRef, ViewEncapsulation } from '@angular/core'; -import { ActivatedRoute, Router } from '@angular/router'; -import { FormArray, FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { TemplatePortal } from '@angular/cdk/portal'; -import { Overlay, OverlayRef } from '@angular/cdk/overlay'; -import { MatDrawerToggleResult } from '@angular/material/sidenav'; -import { Subject } from 'rxjs'; -import { debounceTime, takeUntil } from 'rxjs/operators'; -import { Contact, Country, Tag } from 'app/modules/admin/apps/contacts/contacts.types'; -import { ContactsListComponent } from 'app/modules/admin/apps/contacts/list/list.component'; -import { ContactsService } from 'app/modules/admin/apps/contacts/contacts.service'; - -@Component({ - selector : 'contacts-details', - templateUrl : './details.component.html', - encapsulation : ViewEncapsulation.None, - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class ContactsDetailsComponent implements OnInit, OnDestroy -{ - @ViewChild('avatarFileInput') private _avatarFileInput: ElementRef; - @ViewChild('tagsPanel') private _tagsPanel: TemplateRef; - @ViewChild('tagsPanelOrigin') private _tagsPanelOrigin: ElementRef; - - editMode: boolean = false; - tags: Tag[]; - tagsEditMode: boolean = false; - filteredTags: Tag[]; - contact: Contact; - contactForm: FormGroup; - contacts: Contact[]; - countries: Country[]; - private _tagsPanelOverlayRef: OverlayRef; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor( - private _activatedRoute: ActivatedRoute, - private _changeDetectorRef: ChangeDetectorRef, - private _contactsListComponent: ContactsListComponent, - private _contactsService: ContactsService, - private _formBuilder: FormBuilder, - private _renderer2: Renderer2, - private _router: Router, - private _overlay: Overlay, - private _viewContainerRef: ViewContainerRef - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Open the drawer - this._contactsListComponent.matDrawer.open(); - - // Create the contact form - this.contactForm = this._formBuilder.group({ - id : [''], - avatar : [null], - name : ['', [Validators.required]], - emails : this._formBuilder.array([]), - phoneNumbers: this._formBuilder.array([]), - title : [''], - company : [''], - birthday : [null], - address : [null], - notes : [null], - tags : [[]] - }); - - // Get the contacts - this._contactsService.contacts$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((contacts: Contact[]) => { - this.contacts = contacts; - - // Mark for check - this._changeDetectorRef.markForCheck(); - }); - - // Get the contact - this._contactsService.contact$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((contact: Contact) => { - - // Open the drawer in case it is closed - this._contactsListComponent.matDrawer.open(); - - // Get the contact - this.contact = contact; - - // Clear the emails and phoneNumbers form arrays - (this.contactForm.get('emails') as FormArray).clear(); - (this.contactForm.get('phoneNumbers') as FormArray).clear(); - - // Patch values to the form - this.contactForm.patchValue(contact); - - // Setup the emails form array - const emailFormGroups = []; - - if ( contact.emails.length > 0 ) - { - // Iterate through them - contact.emails.forEach((email) => { - - // Create an email form group - emailFormGroups.push( - this._formBuilder.group({ - email: [email.email], - label: [email.label] - }) - ); - }); - } - else - { - // Create an email form group - emailFormGroups.push( - this._formBuilder.group({ - email: [''], - label: [''] - }) - ); - } - - // Add the email form groups to the emails form array - emailFormGroups.forEach((emailFormGroup) => { - (this.contactForm.get('emails') as FormArray).push(emailFormGroup); - }); - - // Setup the phone numbers form array - const phoneNumbersFormGroups = []; - - if ( contact.phoneNumbers.length > 0 ) - { - // Iterate through them - contact.phoneNumbers.forEach((phoneNumber) => { - - // Create an email form group - phoneNumbersFormGroups.push( - this._formBuilder.group({ - country: [phoneNumber.country], - number : [phoneNumber.number], - label : [phoneNumber.label] - }) - ); - }); - } - else - { - // Create a phone number form group - phoneNumbersFormGroups.push( - this._formBuilder.group({ - country: ['us'], - number : [''], - label : [''] - }) - ); - } - - // Add the phone numbers form groups to the phone numbers form array - phoneNumbersFormGroups.forEach((phoneNumbersFormGroup) => { - (this.contactForm.get('phoneNumbers') as FormArray).push(phoneNumbersFormGroup); - }); - - // Toggle the edit mode off - this.toggleEditMode(false); - - // Mark for check - this._changeDetectorRef.markForCheck(); - }); - - // Get the country telephone codes - this._contactsService.countries$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((codes: Country[]) => { - this.countries = codes; - - // Mark for check - this._changeDetectorRef.markForCheck(); - }); - - // Get the tags - this._contactsService.tags$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((tags: Tag[]) => { - this.tags = tags; - this.filteredTags = tags; - - // Mark for check - this._changeDetectorRef.markForCheck(); - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - - // Dispose the overlays if they are still on the DOM - if ( this._tagsPanelOverlayRef ) - { - this._tagsPanelOverlayRef.dispose(); - } - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Close the drawer - */ - closeDrawer(): Promise - { - return this._contactsListComponent.matDrawer.close(); - } - - /** - * Toggle edit mode - * - * @param editMode - */ - toggleEditMode(editMode: boolean | null = null): void - { - if ( editMode === null ) - { - this.editMode = !this.editMode; - } - else - { - this.editMode = editMode; - } - - // Mark for check - this._changeDetectorRef.markForCheck(); - } - - /** - * Update the contact - */ - updateContact(): void - { - // Get the contact object - const contact = this.contactForm.getRawValue(); - - // Go through the contact object and clear empty values - contact.emails = contact.emails.filter((email) => { - return email.email; - }); - - contact.phoneNumbers = contact.phoneNumbers.filter((phoneNumber) => { - return phoneNumber.number; - }); - - // Update the contact on the server - this._contactsService.updateContact(contact.id, contact).subscribe(() => { - - // Toggle the edit mode off - this.toggleEditMode(false); - }); - } - - /** - * Delete the contact - */ - deleteContact(): void - { - // Get the current contact's id - const id = this.contact.id; - - // Get the next/previous contact's id - const currentContactIndex = this.contacts.findIndex(item => item.id === id); - const nextContactIndex = currentContactIndex + ((currentContactIndex === (this.contacts.length - 1)) ? -1 : 1); - const nextContactId = (this.contacts.length === 1 && this.contacts[0].id === id) ? null : this.contacts[nextContactIndex].id; - - // Delete the contact - this._contactsService.deleteContact(id) - .subscribe((isDeleted) => { - - // Return if the contact wasn't deleted... - if ( !isDeleted ) - { - return; - } - - // Get the current activated route - let route = this._activatedRoute; - while ( route.firstChild ) - { - route = route.firstChild; - } - - // Navigate to the next contact if available - if ( nextContactId ) - { - this._router.navigate(['../', nextContactId], {relativeTo: route}); - } - // Otherwise, navigate to the parent - else - { - this._router.navigate(['../'], {relativeTo: route}); - } - - // Toggle the edit mode off - this.toggleEditMode(false); - }); - - // Mark for check - this._changeDetectorRef.markForCheck(); - } - - /** - * Upload avatar - * - * @param fileList - */ - uploadAvatar(fileList: FileList): void - { - // Return if canceled - if ( !fileList.length ) - { - return; - } - - const allowedTypes = ['image/jpeg', 'image/png']; - const file = fileList[0]; - - // Return if the file is not allowed - if ( !allowedTypes.includes(file.type) ) - { - return; - } - - // Upload the avatar - this._contactsService.uploadAvatar(this.contact.id, file).subscribe(); - } - - /** - * Remove the avatar - */ - removeAvatar(): void - { - // Get the form control for 'avatar' - const avatarFormControl = this.contactForm.get('avatar'); - - // Set the avatar as null - avatarFormControl.setValue(null); - - // Set the file input value as null - this._avatarFileInput.nativeElement.value = null; - - // Update the contact - this.contact.avatar = null; - } - - /** - * Open tags panel - */ - openTagsPanel(): void - { - // Create the overlay - this._tagsPanelOverlayRef = this._overlay.create({ - backdropClass : '', - hasBackdrop : true, - scrollStrategy : this._overlay.scrollStrategies.block(), - positionStrategy: this._overlay.position() - .flexibleConnectedTo(this._tagsPanelOrigin.nativeElement) - .withFlexibleDimensions() - .withViewportMargin(64) - .withLockedPosition() - .withPositions([ - { - originX : 'start', - originY : 'bottom', - overlayX: 'start', - overlayY: 'top' - } - ]) - }); - - // Subscribe to the attachments observable - this._tagsPanelOverlayRef.attachments().subscribe(() => { - - // Add a class to the origin - this._renderer2.addClass(this._tagsPanelOrigin.nativeElement, 'panel-opened'); - - // Focus to the search input once the overlay has been attached - this._tagsPanelOverlayRef.overlayElement.querySelector('input').focus(); - }); - - // Create a portal from the template - const templatePortal = new TemplatePortal(this._tagsPanel, this._viewContainerRef); - - // Attach the portal to the overlay - this._tagsPanelOverlayRef.attach(templatePortal); - - // Subscribe to the backdrop click - this._tagsPanelOverlayRef.backdropClick().subscribe(() => { - - // Remove the class from the origin - this._renderer2.removeClass(this._tagsPanelOrigin.nativeElement, 'panel-opened'); - - // If overlay exists and attached... - if ( this._tagsPanelOverlayRef && this._tagsPanelOverlayRef.hasAttached() ) - { - // Detach it - this._tagsPanelOverlayRef.detach(); - - // Reset the tag filter - this.filteredTags = this.tags; - - // Toggle the edit mode off - this.tagsEditMode = false; - } - - // If template portal exists and attached... - if ( templatePortal && templatePortal.isAttached ) - { - // Detach it - templatePortal.detach(); - } - }); - } - - /** - * Toggle the tags edit mode - */ - toggleTagsEditMode(): void - { - this.tagsEditMode = !this.tagsEditMode; - } - - /** - * Filter tags - * - * @param event - */ - filterTags(event): void - { - // Get the value - const value = event.target.value.toLowerCase(); - - // Filter the tags - this.filteredTags = this.tags.filter(tag => tag.title.toLowerCase().includes(value)); - } - - /** - * Filter tags input key down event - * - * @param event - */ - filterTagsInputKeyDown(event): void - { - // Return if the pressed key is not 'Enter' - if ( event.key !== 'Enter' ) - { - return; - } - - // If there is no tag available... - if ( this.filteredTags.length === 0 ) - { - // Create the tag - this.createTag(event.target.value); - - // Clear the input - event.target.value = ''; - - // Return - return; - } - - // If there is a tag... - const tag = this.filteredTags[0]; - const isTagApplied = this.contact.tags.find((id) => id === tag.id); - - // If the found tag is already applied to the contact... - if ( isTagApplied ) - { - // Remove the tag from the contact - this.removeTagFromContact(tag); - } - else - { - // Otherwise add the tag to the contact - this.addTagToContact(tag); - } - } - - /** - * Create a new tag - * - * @param title - */ - createTag(title: string): void - { - const tag = { - title - }; - - // Create tag on the server - this._contactsService.createTag(tag) - .subscribe((response) => { - - // Add the tag to the contact - this.addTagToContact(response); - }); - } - - /** - * Update the tag title - * - * @param tag - * @param event - */ - updateTagTitle(tag: Tag, event): void - { - // Update the title on the tag - tag.title = event.target.value; - - // Update the tag on the server - this._contactsService.updateTag(tag.id, tag) - .pipe(debounceTime(300)) - .subscribe(); - - // Mark for check - this._changeDetectorRef.markForCheck(); - } - - /** - * Delete the tag - * - * @param tag - */ - deleteTag(tag: Tag): void - { - // Delete the tag from the server - this._contactsService.deleteTag(tag.id).subscribe(); - - // Mark for check - this._changeDetectorRef.markForCheck(); - } - - /** - * Add tag to the contact - * - * @param tag - */ - addTagToContact(tag: Tag): void - { - // Add the tag - this.contact.tags.unshift(tag.id); - - // Update the contact form - this.contactForm.get('tags').patchValue(this.contact.tags); - - // Mark for check - this._changeDetectorRef.markForCheck(); - } - - /** - * Remove tag from the contact - * - * @param tag - */ - removeTagFromContact(tag: Tag): void - { - // Remove the tag - this.contact.tags.splice(this.contact.tags.findIndex(item => item === tag.id), 1); - - // Update the contact form - this.contactForm.get('tags').patchValue(this.contact.tags); - - // Mark for check - this._changeDetectorRef.markForCheck(); - } - - /** - * Toggle contact tag - * - * @param tag - */ - toggleContactTag(tag: Tag): void - { - if ( this.contact.tags.includes(tag.id) ) - { - this.removeTagFromContact(tag); - } - else - { - this.addTagToContact(tag); - } - } - - /** - * Should the create tag button be visible - * - * @param inputValue - */ - shouldShowCreateTagButton(inputValue: string): boolean - { - return !!!(inputValue === '' || this.tags.findIndex(tag => tag.title.toLowerCase() === inputValue.toLowerCase()) > -1); - } - - /** - * Add the email field - */ - addEmailField(): void - { - // Create an empty email form group - const emailFormGroup = this._formBuilder.group({ - email: [''], - label: [''] - }); - - // Add the email form group to the emails form array - (this.contactForm.get('emails') as FormArray).push(emailFormGroup); - - // Mark for check - this._changeDetectorRef.markForCheck(); - } - - /** - * Remove the email field - * - * @param index - */ - removeEmailField(index: number): void - { - // Get form array for emails - const emailsFormArray = this.contactForm.get('emails') as FormArray; - - // Remove the email field - emailsFormArray.removeAt(index); - - // Mark for check - this._changeDetectorRef.markForCheck(); - } - - /** - * Add an empty phone number field - */ - addPhoneNumberField(): void - { - // Create an empty phone number form group - const phoneNumberFormGroup = this._formBuilder.group({ - country: ['us'], - number : [''], - label : [''] - }); - - // Add the phone number form group to the phoneNumbers form array - (this.contactForm.get('phoneNumbers') as FormArray).push(phoneNumberFormGroup); - - // Mark for check - this._changeDetectorRef.markForCheck(); - } - - /** - * Remove the phone number field - * - * @param index - */ - removePhoneNumberField(index: number): void - { - // Get form array for phone numbers - const phoneNumbersFormArray = this.contactForm.get('phoneNumbers') as FormArray; - - // Remove the phone number field - phoneNumbersFormArray.removeAt(index); - - // Mark for check - this._changeDetectorRef.markForCheck(); - } - - /** - * Get country info by iso code - * - * @param iso - */ - getCountryByIso(iso: string): Country - { - return this.countries.find((country) => country.iso === iso); - } - - /** - * Track by function for ngFor loops - * - * @param index - * @param item - */ - trackByFn(index: number, item: any): any - { - return item.id || index; - } -} diff --git a/src/app/modules/admin/apps/contacts/list/list.component.html b/src/app/modules/admin/apps/contacts/list/list.component.html deleted file mode 100644 index 55d0a961..00000000 --- a/src/app/modules/admin/apps/contacts/list/list.component.html +++ /dev/null @@ -1,120 +0,0 @@ -
- - - - - - - - - - - -
- - -
- - -
-
Contacts
-
- - {{contactsCount}} - - {{contactsCount | i18nPlural: { - '=0' : 'No contacts', - '=1' : 'contact', - 'other': 'contacts' - } }} -
-
- - -
- -
- - - - -
- - -
-
- - -
- - - - - -
- {{contact.name.charAt(0)}} -
-
- -
-
- - Contact avatar - - -
- {{contact.name.charAt(0)}} -
-
-
-
-
{{contact.name}}
-
{{contact.title}}
-
-
-
-
-
- - - -
There are no contacts!
-
- -
- -
- -
- -
- -
diff --git a/src/app/modules/admin/apps/contacts/list/list.component.ts b/src/app/modules/admin/apps/contacts/list/list.component.ts deleted file mode 100644 index a1ac2df4..00000000 --- a/src/app/modules/admin/apps/contacts/list/list.component.ts +++ /dev/null @@ -1,241 +0,0 @@ -import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, OnDestroy, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; -import { DOCUMENT } from '@angular/common'; -import { ActivatedRoute, Router } from '@angular/router'; -import { FormControl } from '@angular/forms'; -import { MatDrawer } from '@angular/material/sidenav'; -import { fromEvent, Observable, Subject } from 'rxjs'; -import { filter, switchMap, takeUntil } from 'rxjs/operators'; -import { FuseMediaWatcherService } from '@fuse/services/media-watcher'; -import { Contact, Country } from 'app/modules/admin/apps/contacts/contacts.types'; -import { ContactsService } from 'app/modules/admin/apps/contacts/contacts.service'; - -@Component({ - selector : 'contacts-list', - templateUrl : './list.component.html', - encapsulation : ViewEncapsulation.None, - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class ContactsListComponent implements OnInit, OnDestroy -{ - @ViewChild('matDrawer', {static: true}) matDrawer: MatDrawer; - - contacts$: Observable; - - contactsCount: number = 0; - contactsTableColumns: string[] = ['name', 'email', 'phoneNumber', 'job']; - countries: Country[]; - drawerMode: 'side' | 'over'; - searchInputControl: FormControl = new FormControl(); - selectedContact: Contact; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor( - private _activatedRoute: ActivatedRoute, - private _changeDetectorRef: ChangeDetectorRef, - private _contactsService: ContactsService, - @Inject(DOCUMENT) private _document: any, - private _router: Router, - private _fuseMediaWatcherService: FuseMediaWatcherService - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Get the contacts - this.contacts$ = this._contactsService.contacts$; - this._contactsService.contacts$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((contacts: Contact[]) => { - - // Update the counts - this.contactsCount = contacts.length; - - // Mark for check - this._changeDetectorRef.markForCheck(); - }); - - // Get the contact - this._contactsService.contact$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((contact: Contact) => { - - // Update the selected contact - this.selectedContact = contact; - - // Mark for check - this._changeDetectorRef.markForCheck(); - }); - - // Get the countries - this._contactsService.countries$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((countries: Country[]) => { - - // Update the countries - this.countries = countries; - - // Mark for check - this._changeDetectorRef.markForCheck(); - }); - - // Subscribe to search input field value changes - this.searchInputControl.valueChanges - .pipe( - takeUntil(this._unsubscribeAll), - switchMap((query) => { - - // Search - return this._contactsService.searchContacts(query); - }) - ) - .subscribe(); - - // Subscribe to MatDrawer opened change - this.matDrawer.openedChange.subscribe((opened) => { - if ( !opened ) - { - // Remove the selected contact when drawer closed - this.selectedContact = null; - - // Mark for check - this._changeDetectorRef.markForCheck(); - } - }); - - // Subscribe to media changes - this._fuseMediaWatcherService.onMediaChange$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe(({matchingAliases}) => { - - // Set the drawerMode if the given breakpoint is active - if ( matchingAliases.includes('lg') ) - { - this.drawerMode = 'side'; - } - else - { - this.drawerMode = 'over'; - } - - // Mark for check - this._changeDetectorRef.markForCheck(); - }); - - // Listen for shortcuts - fromEvent(this._document, 'keydown') - .pipe( - takeUntil(this._unsubscribeAll), - filter((event) => { - return (event.ctrlKey === true || event.metaKey) // Ctrl or Cmd - && (event.key === '/'); // '/' - }) - ) - .subscribe(() => { - this.createContact(); - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Go to contact - * - * @param id - */ - goToContact(id: string): void - { - // Get the current activated route - let route = this._activatedRoute; - while ( route.firstChild ) - { - route = route.firstChild; - } - - // Go to contact - this._router.navigate(['../', id], {relativeTo: route}); - - // Mark for check - this._changeDetectorRef.markForCheck(); - } - - /** - * On backdrop clicked - */ - onBackdropClicked(): void - { - // Get the current activated route - let route = this._activatedRoute; - while ( route.firstChild ) - { - route = route.firstChild; - } - - // Go to the parent route - this._router.navigate(['../'], {relativeTo: route}); - - // Mark for check - this._changeDetectorRef.markForCheck(); - } - - /** - * Create contact - */ - createContact(): void - { - // Create the contact - this._contactsService.createContact().subscribe((newContact) => { - - // Go to new contact - this.goToContact(newContact.id); - }); - } - - /** - * Get country code - * - * @param iso - */ - getCountryCode(iso: string): string - { - if ( !iso ) - { - return ''; - } - - return this.countries.find((country) => country.iso === iso).code; - } - - /** - * Track by function for ngFor loops - * - * @param index - * @param item - */ - trackByFn(index: number, item: any): any - { - return item.id || index; - } -} diff --git a/src/app/modules/admin/apps/ecommerce/ecommerce.module.ts b/src/app/modules/admin/apps/ecommerce/ecommerce.module.ts deleted file mode 100644 index 1a06f40b..00000000 --- a/src/app/modules/admin/apps/ecommerce/ecommerce.module.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { MatButtonModule } from '@angular/material/button'; -import { MatCheckboxModule } from '@angular/material/checkbox'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatIconModule } from '@angular/material/icon'; -import { MatInputModule } from '@angular/material/input'; -import { MatMenuModule } from '@angular/material/menu'; -import { MatPaginatorModule } from '@angular/material/paginator'; -import { MatProgressBarModule } from '@angular/material/progress-bar'; -import { MatRippleModule } from '@angular/material/core'; -import { MatSortModule } from '@angular/material/sort'; -import { MatSelectModule } from '@angular/material/select'; -import { MatSlideToggleModule } from '@angular/material/slide-toggle'; -import { MatTableModule } from '@angular/material/table'; -import { MatTooltipModule } from '@angular/material/tooltip'; -import { SharedModule } from 'app/shared/shared.module'; -import { InventoryComponent } from 'app/modules/admin/apps/ecommerce/inventory/inventory.component'; -import { InventoryListComponent } from 'app/modules/admin/apps/ecommerce/inventory/list/inventory.component'; -import { ecommerceRoutes } from 'app/modules/admin/apps/ecommerce/ecommerce.routing'; - -@NgModule({ - declarations: [ - InventoryComponent, - InventoryListComponent - ], - imports : [ - RouterModule.forChild(ecommerceRoutes), - MatButtonModule, - MatCheckboxModule, - MatFormFieldModule, - MatIconModule, - MatInputModule, - MatMenuModule, - MatPaginatorModule, - MatProgressBarModule, - MatRippleModule, - MatSortModule, - MatSelectModule, - MatSlideToggleModule, - MatTableModule, - MatTooltipModule, - SharedModule - ] -}) -export class ECommerceModule -{ -} diff --git a/src/app/modules/admin/apps/ecommerce/ecommerce.routing.ts b/src/app/modules/admin/apps/ecommerce/ecommerce.routing.ts deleted file mode 100644 index a749332d..00000000 --- a/src/app/modules/admin/apps/ecommerce/ecommerce.routing.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { Route } from '@angular/router'; -import { InventoryComponent } from 'app/modules/admin/apps/ecommerce/inventory/inventory.component'; -import { InventoryListComponent } from 'app/modules/admin/apps/ecommerce/inventory/list/inventory.component'; -import { InventoryBrandsResolver, InventoryCategoriesResolver, InventoryProductsResolver, InventoryTagsResolver, InventoryVendorsResolver } from 'app/modules/admin/apps/ecommerce/inventory/inventory.resolvers'; - -export const ecommerceRoutes: Route[] = [ - { - path : '', - pathMatch : 'full', - redirectTo: 'inventory' - }, - { - path : 'inventory', - component: InventoryComponent, - children : [ - { - path : '', - component: InventoryListComponent, - resolve : { - brands : InventoryBrandsResolver, - categories: InventoryCategoriesResolver, - products : InventoryProductsResolver, - tags : InventoryTagsResolver, - vendors : InventoryVendorsResolver - } - } - ] - /*children : [ - { - path : '', - component: ContactsListComponent, - resolve : { - tasks : ContactsResolver, - countries: ContactsCountriesResolver - }, - children : [ - { - path : ':id', - component : ContactsDetailsComponent, - resolve : { - task : ContactsContactResolver, - countries: ContactsCountriesResolver - }, - canDeactivate: [CanDeactivateContactsDetails] - } - ] - } - ]*/ - } -]; diff --git a/src/app/modules/admin/apps/ecommerce/inventory/inventory.component.html b/src/app/modules/admin/apps/ecommerce/inventory/inventory.component.html deleted file mode 100644 index 0680b43f..00000000 --- a/src/app/modules/admin/apps/ecommerce/inventory/inventory.component.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/app/modules/admin/apps/ecommerce/inventory/inventory.component.ts b/src/app/modules/admin/apps/ecommerce/inventory/inventory.component.ts deleted file mode 100644 index 209f1e4c..00000000 --- a/src/app/modules/admin/apps/ecommerce/inventory/inventory.component.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core'; - -@Component({ - selector : 'inventory', - templateUrl : './inventory.component.html', - encapsulation : ViewEncapsulation.None, - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class InventoryComponent -{ - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/apps/ecommerce/inventory/inventory.resolvers.ts b/src/app/modules/admin/apps/ecommerce/inventory/inventory.resolvers.ts deleted file mode 100644 index 47b83a18..00000000 --- a/src/app/modules/admin/apps/ecommerce/inventory/inventory.resolvers.ts +++ /dev/null @@ -1,194 +0,0 @@ -import { Injectable } from '@angular/core'; -import { ActivatedRouteSnapshot, Resolve, Router, RouterStateSnapshot } from '@angular/router'; -import { Observable, throwError } from 'rxjs'; -import { catchError } from 'rxjs/operators'; -import { InventoryService } from 'app/modules/admin/apps/ecommerce/inventory/inventory.service'; -import { InventoryBrand, InventoryCategory, InventoryPagination, InventoryProduct, InventoryTag, InventoryVendor } from 'app/modules/admin/apps/ecommerce/inventory/inventory.types'; - -@Injectable({ - providedIn: 'root' -}) -export class InventoryBrandsResolver implements Resolve -{ - /** - * Constructor - */ - constructor(private _inventoryService: InventoryService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Resolver - * - * @param route - * @param state - */ - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable - { - return this._inventoryService.getBrands(); - } -} - -@Injectable({ - providedIn: 'root' -}) -export class InventoryCategoriesResolver implements Resolve -{ - /** - * Constructor - */ - constructor(private _inventoryService: InventoryService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Resolver - * - * @param route - * @param state - */ - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable - { - return this._inventoryService.getCategories(); - } -} - -@Injectable({ - providedIn: 'root' -}) -export class InventoryProductResolver implements Resolve -{ - /** - * Constructor - */ - constructor( - private _inventoryService: InventoryService, - private _router: Router - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Resolver - * - * @param route - * @param state - */ - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable - { - return this._inventoryService.getProductById(route.paramMap.get('id')) - .pipe( - // Error here means the requested product is not available - catchError((error) => { - - // Log the error - console.error(error); - - // Get the parent url - const parentUrl = state.url.split('/').slice(0, -1).join('/'); - - // Navigate to there - this._router.navigateByUrl(parentUrl); - - // Throw an error - return throwError(error); - }) - ); - } -} - -@Injectable({ - providedIn: 'root' -}) -export class InventoryProductsResolver implements Resolve -{ - /** - * Constructor - */ - constructor(private _inventoryService: InventoryService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Resolver - * - * @param route - * @param state - */ - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<{ pagination: InventoryPagination, products: InventoryProduct[] }> - { - return this._inventoryService.getProducts(); - } -} - -@Injectable({ - providedIn: 'root' -}) -export class InventoryTagsResolver implements Resolve -{ - /** - * Constructor - */ - constructor(private _inventoryService: InventoryService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Resolver - * - * @param route - * @param state - */ - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable - { - return this._inventoryService.getTags(); - } -} - -@Injectable({ - providedIn: 'root' -}) -export class InventoryVendorsResolver implements Resolve -{ - /** - * Constructor - */ - constructor(private _inventoryService: InventoryService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Resolver - * - * @param route - * @param state - */ - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable - { - return this._inventoryService.getVendors(); - } -} diff --git a/src/app/modules/admin/apps/ecommerce/inventory/inventory.service.ts b/src/app/modules/admin/apps/ecommerce/inventory/inventory.service.ts deleted file mode 100644 index 50a13b68..00000000 --- a/src/app/modules/admin/apps/ecommerce/inventory/inventory.service.ts +++ /dev/null @@ -1,441 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient } from '@angular/common/http'; -import { BehaviorSubject, Observable, of, throwError } from 'rxjs'; -import { filter, map, switchMap, take, tap } from 'rxjs/operators'; -import { InventoryBrand, InventoryCategory, InventoryPagination, InventoryProduct, InventoryTag, InventoryVendor } from 'app/modules/admin/apps/ecommerce/inventory/inventory.types'; - -@Injectable({ - providedIn: 'root' -}) -export class InventoryService -{ - // Private - private _brands: BehaviorSubject = new BehaviorSubject(null); - private _categories: BehaviorSubject = new BehaviorSubject(null); - private _pagination: BehaviorSubject = new BehaviorSubject(null); - private _product: BehaviorSubject = new BehaviorSubject(null); - private _products: BehaviorSubject = new BehaviorSubject(null); - private _tags: BehaviorSubject = new BehaviorSubject(null); - private _vendors: BehaviorSubject = new BehaviorSubject(null); - - /** - * Constructor - */ - constructor(private _httpClient: HttpClient) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Accessors - // ----------------------------------------------------------------------------------------------------- - - /** - * Getter for brands - */ - get brands$(): Observable - { - return this._brands.asObservable(); - } - - /** - * Getter for categories - */ - get categories$(): Observable - { - return this._categories.asObservable(); - } - - /** - * Getter for pagination - */ - get pagination$(): Observable - { - return this._pagination.asObservable(); - } - - /** - * Getter for product - */ - get product$(): Observable - { - return this._product.asObservable(); - } - - /** - * Getter for products - */ - get products$(): Observable - { - return this._products.asObservable(); - } - - /** - * Getter for tags - */ - get tags$(): Observable - { - return this._tags.asObservable(); - } - - /** - * Getter for vendors - */ - get vendors$(): Observable - { - return this._vendors.asObservable(); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Get brands - */ - getBrands(): Observable - { - return this._httpClient.get('api/apps/ecommerce/inventory/brands').pipe( - tap((brands) => { - this._brands.next(brands); - }) - ); - } - - /** - * Get categories - */ - getCategories(): Observable - { - return this._httpClient.get('api/apps/ecommerce/inventory/categories').pipe( - tap((categories) => { - this._categories.next(categories); - }) - ); - } - - /** - * Get products - * - * - * @param page - * @param size - * @param sort - * @param order - * @param search - */ - getProducts(page: number = 0, size: number = 10, sort: string = 'name', order: 'asc' | 'desc' | '' = 'asc', search: string = ''): - Observable<{ pagination: InventoryPagination, products: InventoryProduct[] }> - { - return this._httpClient.get<{ pagination: InventoryPagination, products: InventoryProduct[] }>('api/apps/ecommerce/inventory/products', { - params: { - page: '' + page, - size: '' + size, - sort, - order, - search - } - }).pipe( - tap((response) => { - this._pagination.next(response.pagination); - this._products.next(response.products); - }) - ); - } - - /** - * Get product by id - */ - getProductById(id: string): Observable - { - return this._products.pipe( - take(1), - map((products) => { - - // Find the product - const product = products.find(item => item.id === id) || null; - - // Update the product - this._product.next(product); - - // Return the product - return product; - }), - switchMap((product) => { - - if ( !product ) - { - return throwError('Could not found product with id of ' + id + '!'); - } - - return of(product); - }) - ); - } - - /** - * Create product - */ - createProduct(): Observable - { - return this.products$.pipe( - take(1), - switchMap((products) => this._httpClient.post('api/apps/ecommerce/inventory/product', {}).pipe( - map((newProduct) => { - - // Update the products with the new product - this._products.next([newProduct, ...products]); - - // Return the new product - return newProduct; - }) - )) - ); - } - - /** - * Update product - * - * @param id - * @param product - */ - updateProduct(id: string, product: InventoryProduct): Observable - { - return this.products$.pipe( - take(1), - switchMap(products => this._httpClient.patch('api/apps/ecommerce/inventory/product', { - id, - product - }).pipe( - map((updatedProduct) => { - - // Find the index of the updated product - const index = products.findIndex(item => item.id === id); - - // Update the product - products[index] = updatedProduct; - - // Update the products - this._products.next(products); - - // Return the updated product - return updatedProduct; - }), - switchMap(updatedProduct => this.product$.pipe( - take(1), - filter(item => item && item.id === id), - tap(() => { - - // Update the product if it's selected - this._product.next(updatedProduct); - - // Return the updated product - return updatedProduct; - }) - )) - )) - ); - } - - /** - * Delete the product - * - * @param id - */ - deleteProduct(id: string): Observable - { - return this.products$.pipe( - take(1), - switchMap(products => this._httpClient.delete('api/apps/ecommerce/inventory/product', {params: {id}}).pipe( - map((isDeleted: boolean) => { - - // Find the index of the deleted product - const index = products.findIndex(item => item.id === id); - - // Delete the product - products.splice(index, 1); - - // Update the products - this._products.next(products); - - // Return the deleted status - return isDeleted; - }) - )) - ); - } - - /** - * Get tags - */ - getTags(): Observable - { - return this._httpClient.get('api/apps/ecommerce/inventory/tags').pipe( - tap((tags) => { - this._tags.next(tags); - }) - ); - } - - /** - * Create tag - * - * @param tag - */ - createTag(tag: InventoryTag): Observable - { - return this.tags$.pipe( - take(1), - switchMap(tags => this._httpClient.post('api/apps/ecommerce/inventory/tag', {tag}).pipe( - map((newTag) => { - - // Update the tags with the new tag - this._tags.next([...tags, newTag]); - - // Return new tag from observable - return newTag; - }) - )) - ); - } - - /** - * Update the tag - * - * @param id - * @param tag - */ - updateTag(id: string, tag: InventoryTag): Observable - { - return this.tags$.pipe( - take(1), - switchMap(tags => this._httpClient.patch('api/apps/ecommerce/inventory/tag', { - id, - tag - }).pipe( - map((updatedTag) => { - - // Find the index of the updated tag - const index = tags.findIndex(item => item.id === id); - - // Update the tag - tags[index] = updatedTag; - - // Update the tags - this._tags.next(tags); - - // Return the updated tag - return updatedTag; - }) - )) - ); - } - - /** - * Delete the tag - * - * @param id - */ - deleteTag(id: string): Observable - { - return this.tags$.pipe( - take(1), - switchMap(tags => this._httpClient.delete('api/apps/ecommerce/inventory/tag', {params: {id}}).pipe( - map((isDeleted: boolean) => { - - // Find the index of the deleted tag - const index = tags.findIndex(item => item.id === id); - - // Delete the tag - tags.splice(index, 1); - - // Update the tags - this._tags.next(tags); - - // Return the deleted status - return isDeleted; - }), - filter(isDeleted => isDeleted), - switchMap(isDeleted => this.products$.pipe( - take(1), - map((products) => { - - // Iterate through the contacts - products.forEach((product) => { - - const tagIndex = product.tags.findIndex(tag => tag === id); - - // If the contact has the tag, remove it - if ( tagIndex > -1 ) - { - product.tags.splice(tagIndex, 1); - } - }); - - // Return the deleted status - return isDeleted; - }) - )) - )) - ); - } - - /** - * Get vendors - */ - getVendors(): Observable - { - return this._httpClient.get('api/apps/ecommerce/inventory/vendors').pipe( - tap((vendors) => { - this._vendors.next(vendors); - }) - ); - } - - /** - * Update the avatar of the given contact - * - * @param id - * @param avatar - */ - /*uploadAvatar(id: string, avatar: File): Observable - { - return this.contacts$.pipe( - take(1), - switchMap(contacts => this._httpClient.post('api/apps/contacts/avatar', { - id, - avatar - }, { - headers: { - 'Content-Type': avatar.type - } - }).pipe( - map((updatedContact) => { - - // Find the index of the updated contact - const index = contacts.findIndex(item => item.id === id); - - // Update the contact - contacts[index] = updatedContact; - - // Update the contacts - this._contacts.next(contacts); - - // Return the updated contact - return updatedContact; - }), - switchMap(updatedContact => this.contact$.pipe( - take(1), - filter(item => item && item.id === id), - tap(() => { - - // Update the contact if it's selected - this._contact.next(updatedContact); - - // Return the updated contact - return updatedContact; - }) - )) - )) - ); - }*/ -} diff --git a/src/app/modules/admin/apps/ecommerce/inventory/inventory.types.ts b/src/app/modules/admin/apps/ecommerce/inventory/inventory.types.ts deleted file mode 100644 index 5daed0ee..00000000 --- a/src/app/modules/admin/apps/ecommerce/inventory/inventory.types.ts +++ /dev/null @@ -1,60 +0,0 @@ -export interface InventoryProduct -{ - id: string; - category?: string; - name: string; - description?: string; - tags?: string[]; - sku?: string | null; - barcode?: string | null; - brand?: string | null; - vendor: string | null; - stock: number; - reserved: number; - cost: number; - basePrice: number; - taxPercent: number; - price: number; - weight: number; - thumbnail: string; - images: string[]; - active: boolean; -} - -export interface InventoryPagination -{ - length: number; - size: number; - page: number; - lastPage: number; - startIndex: number; - endIndex: number; -} - -export interface InventoryCategory -{ - id: string; - parentId: string; - name: string; - slug: string; -} - -export interface InventoryBrand -{ - id: string; - name: string; - slug: string; -} - -export interface InventoryTag -{ - id?: string; - title?: string; -} - -export interface InventoryVendor -{ - id: string; - name: string; - slug: string; -} diff --git a/src/app/modules/admin/apps/ecommerce/inventory/list/inventory.component.html b/src/app/modules/admin/apps/ecommerce/inventory/list/inventory.component.html deleted file mode 100644 index 77927ab8..00000000 --- a/src/app/modules/admin/apps/ecommerce/inventory/list/inventory.component.html +++ /dev/null @@ -1,567 +0,0 @@ -
- - -
- -
- -
- -
Inventory
- -
- - - - - - - -
-
- - -
- - -
- - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- SKU - -
- - - - No Image - - - {{product.sku}} -
-
- Name - - {{product.name}} - - Price - - {{product.price | currency:'USD':'symbol':'1.2-2'}} - - Stock - - - {{product.stock}} - - - - - - - - - - - - - - - Active - - - - - Details - - - -
-
- -
- -
- - -
-
-
- - - - - NO IMAGE - -
-
- - - {{selectedProductForm.get('currentImageIndex').value + 1}} of {{selectedProductForm.get('images').value.length}} - - -
-
-
- Product status - - {{selectedProductForm.get('active').value === true ? 'Active' : 'Disabled'}} - -
-
- -
-
- - - - Name - - - - -
- - SKU - - - - Barcode - - -
- - -
- - Category - - - {{category.name}} - - - - - Brand - - - {{brand.name}} - - - - - Vendor - - - {{vendor.name}} - - - -
- - -
- - Stock - - - - Reserved - - -
-
- - -
- - Cost - $ - - - - Base Price - $ - - - - Tax - % - - - - Price - $ - - -
- - -
- - Weight - lbs. - - - - - - Tags -
- -
-
- - -
- -
- -
- - - - - {{tag.title}} - - - - - -
- - - - - - -
-
-
-
- -
Create "{{newTagInput.value}}"
-
-
-
- -
- -
- -
- -
- -
-
- - - Product updated - - - - An error occurred, try again! - -
- -
-
- -
-
-
-
- -
- - - -
- - -
There are no products!
-
- -
- -
- -
diff --git a/src/app/modules/admin/apps/ecommerce/inventory/list/inventory.component.ts b/src/app/modules/admin/apps/ecommerce/inventory/list/inventory.component.ts deleted file mode 100644 index 5b35c2c1..00000000 --- a/src/app/modules/admin/apps/ecommerce/inventory/list/inventory.component.ts +++ /dev/null @@ -1,552 +0,0 @@ -import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms'; -import { MatCheckboxChange } from '@angular/material/checkbox'; -import { MatPaginator } from '@angular/material/paginator'; -import { MatSort } from '@angular/material/sort'; -import { merge, Observable, Subject } from 'rxjs'; -import { debounceTime, map, switchMap, takeUntil } from 'rxjs/operators'; -import { FuseAnimations } from '@fuse/animations'; -import { InventoryBrand, InventoryCategory, InventoryPagination, InventoryProduct, InventoryTag, InventoryVendor } from 'app/modules/admin/apps/ecommerce/inventory/inventory.types'; -import { InventoryService } from 'app/modules/admin/apps/ecommerce/inventory/inventory.service'; - -@Component({ - selector : 'inventory-list', - templateUrl : './inventory.component.html', - encapsulation : ViewEncapsulation.None, - changeDetection: ChangeDetectionStrategy.OnPush, - animations : FuseAnimations -}) -export class InventoryListComponent implements OnInit, AfterViewInit, OnDestroy -{ - @ViewChild(MatPaginator) private _paginator: MatPaginator; - @ViewChild(MatSort) private _sort: MatSort; - - products$: Observable; - - brands: InventoryBrand[]; - categories: InventoryCategory[]; - filteredTags: InventoryTag[]; - flashMessage: 'success' | 'error' | null = null; - isLoading: boolean = false; - pagination: InventoryPagination; - productsCount: number = 0; - productsTableColumns: string[] = ['sku', 'name', 'price', 'stock', 'active', 'details']; - searchInputControl: FormControl = new FormControl(); - selectedProduct: InventoryProduct | null = null; - selectedProductForm: FormGroup; - tags: InventoryTag[]; - tagsEditMode: boolean = false; - vendors: InventoryVendor[]; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor( - private _changeDetectorRef: ChangeDetectorRef, - private _formBuilder: FormBuilder, - private _inventoryService: InventoryService - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the selected product form - this.selectedProductForm = this._formBuilder.group({ - id : [''], - category : [''], - name : ['', [Validators.required]], - description : [''], - tags : [[]], - sku : [''], - barcode : [''], - brand : [''], - vendor : [''], - stock : [''], - reserved : [''], - cost : [''], - basePrice : [''], - taxPercent : [''], - price : [''], - weight : [''], - thumbnail : [''], - images : [[]], - currentImageIndex: [0], // Image index that is currently being viewed - active : [false] - }); - - // Get the brands - this._inventoryService.brands$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((brands: InventoryBrand[]) => { - - // Update the brands - this.brands = brands; - - // Mark for check - this._changeDetectorRef.markForCheck(); - }); - - // Get the categories - this._inventoryService.categories$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((categories: InventoryCategory[]) => { - - // Update the categories - this.categories = categories; - - // Mark for check - this._changeDetectorRef.markForCheck(); - }); - - // Get the pagination - this._inventoryService.pagination$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((pagination: InventoryPagination) => { - - // Update the pagination - this.pagination = pagination; - - // Mark for check - this._changeDetectorRef.markForCheck(); - }); - - // Get the products - this.products$ = this._inventoryService.products$; - this._inventoryService.products$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((products: InventoryProduct[]) => { - - // Update the counts - this.productsCount = products.length; - - // Mark for check - this._changeDetectorRef.markForCheck(); - }); - - // Get the tags - this._inventoryService.tags$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((tags: InventoryTag[]) => { - - // Update the tags - this.tags = tags; - this.filteredTags = tags; - - // Mark for check - this._changeDetectorRef.markForCheck(); - }); - - // Get the vendors - this._inventoryService.vendors$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((vendors: InventoryVendor[]) => { - - // Update the vendors - this.vendors = vendors; - - // Mark for check - this._changeDetectorRef.markForCheck(); - }); - - // Subscribe to search input field value changes - this.searchInputControl.valueChanges - .pipe( - takeUntil(this._unsubscribeAll), - debounceTime(300), - switchMap((query) => { - this.closeDetails(); - this.isLoading = true; - return this._inventoryService.getProducts(0, 10, 'name', 'asc', query); - }), - map(() => { - this.isLoading = false; - }) - ) - .subscribe(); - } - - /** - * After view init - */ - ngAfterViewInit(): void - { - // If the user changes the sort order... - this._sort.sortChange - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe(() => { - // Reset back to the first page - this._paginator.pageIndex = 0; - - // Close the details - this.closeDetails(); - }); - - // Get products if sort or page changes - merge(this._sort.sortChange, this._paginator.page).pipe( - switchMap(() => { - this.closeDetails(); - this.isLoading = true; - return this._inventoryService.getProducts(this._paginator.pageIndex, this._paginator.pageSize, this._sort.active, this._sort.direction); - }), - map(() => { - this.isLoading = false; - }) - ).subscribe(); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle product details - * - * @param productId - */ - toggleDetails(productId: string): void - { - // If the product is already selected... - if ( this.selectedProduct && this.selectedProduct.id === productId ) - { - // Close the details - this.closeDetails(); - return; - } - - // Get the product by id - this._inventoryService.getProductById(productId) - .subscribe((product) => { - - // Set the selected product - this.selectedProduct = product; - - // Mark for check - this._changeDetectorRef.markForCheck(); - - // Fill the form - this.selectedProductForm.patchValue(product); - - // Mark for check - this._changeDetectorRef.markForCheck(); - }); - } - - /** - * Close the details - */ - closeDetails(): void - { - this.selectedProduct = null; - } - - /** - * Cycle through images of selected product - */ - cycleImages(forward: boolean = true): void - { - // Get the image count and current image index - const count = this.selectedProductForm.get('images').value.length; - const currentIndex = this.selectedProductForm.get('currentImageIndex').value; - - // Calculate the next and previous index - const nextIndex = currentIndex + 1 === count ? 0 : currentIndex + 1; - const prevIndex = currentIndex - 1 < 0 ? count - 1 : currentIndex - 1; - - // If cycling forward... - if ( forward ) - { - this.selectedProductForm.get('currentImageIndex').setValue(nextIndex); - } - // If cycling backwards... - else - { - this.selectedProductForm.get('currentImageIndex').setValue(prevIndex); - } - } - - /** - * Toggle the tags edit mode - */ - toggleTagsEditMode(): void - { - this.tagsEditMode = !this.tagsEditMode; - } - - /** - * Filter tags - * - * @param event - */ - filterTags(event): void - { - // Get the value - const value = event.target.value.toLowerCase(); - - // Filter the tags - this.filteredTags = this.tags.filter(tag => tag.title.toLowerCase().includes(value)); - } - - /** - * Filter tags input key down event - * - * @param event - */ - filterTagsInputKeyDown(event): void - { - // Return if the pressed key is not 'Enter' - if ( event.key !== 'Enter' ) - { - return; - } - - // If there is no tag available... - if ( this.filteredTags.length === 0 ) - { - // Create the tag - this.createTag(event.target.value); - - // Clear the input - event.target.value = ''; - - // Return - return; - } - - // If there is a tag... - const tag = this.filteredTags[0]; - const isTagApplied = this.selectedProduct.tags.find((id) => id === tag.id); - - // If the found tag is already applied to the contact... - if ( isTagApplied ) - { - // Remove the tag from the contact - this.removeTagFromProduct(tag); - } - else - { - // Otherwise add the tag to the contact - this.addTagToProduct(tag); - } - } - - /** - * Create a new tag - * - * @param title - */ - createTag(title: string): void - { - const tag = { - title - }; - - // Create tag on the server - this._inventoryService.createTag(tag) - .subscribe((response) => { - - // Add the tag to the product - this.addTagToProduct(response); - }); - } - - /** - * Update the tag title - * - * @param tag - * @param event - */ - updateTagTitle(tag: InventoryTag, event): void - { - // Update the title on the tag - tag.title = event.target.value; - - // Update the tag on the server - this._inventoryService.updateTag(tag.id, tag) - .pipe(debounceTime(300)) - .subscribe(); - - // Mark for check - this._changeDetectorRef.markForCheck(); - } - - /** - * Delete the tag - * - * @param tag - */ - deleteTag(tag: InventoryTag): void - { - // Delete the tag from the server - this._inventoryService.deleteTag(tag.id).subscribe(); - - // Mark for check - this._changeDetectorRef.markForCheck(); - } - - /** - * Add tag to the product - * - * @param tag - */ - addTagToProduct(tag: InventoryTag): void - { - // Add the tag - this.selectedProduct.tags.unshift(tag.id); - - // Update the selected product form - this.selectedProductForm.get('tags').patchValue(this.selectedProduct.tags); - - // Mark for check - this._changeDetectorRef.markForCheck(); - } - - /** - * Remove tag from the product - * - * @param tag - */ - removeTagFromProduct(tag: InventoryTag): void - { - // Remove the tag - this.selectedProduct.tags.splice(this.selectedProduct.tags.findIndex(item => item === tag.id), 1); - - // Update the selected product form - this.selectedProductForm.get('tags').patchValue(this.selectedProduct.tags); - - // Mark for check - this._changeDetectorRef.markForCheck(); - } - - /** - * Toggle product tag - * - * @param tag - * @param change - */ - toggleProductTag(tag: InventoryTag, change: MatCheckboxChange): void - { - if ( change.checked ) - { - this.addTagToProduct(tag); - } - else - { - this.removeTagFromProduct(tag); - } - } - - /** - * Should the create tag button be visible - * - * @param inputValue - */ - shouldShowCreateTagButton(inputValue: string): boolean - { - return !!!(inputValue === '' || this.tags.findIndex(tag => tag.title.toLowerCase() === inputValue.toLowerCase()) > -1); - } - - /** - * Create product - */ - createProduct(): void - { - // Create the product - this._inventoryService.createProduct().subscribe((newProduct) => { - - // Go to new product - this.selectedProduct = newProduct; - - // Fill the form - this.selectedProductForm.patchValue(newProduct); - - // Mark for check - this._changeDetectorRef.markForCheck(); - }); - } - - /** - * Update the selected product using the form mock-api - */ - updateSelectedProduct(): void - { - // Get the product object - const product = this.selectedProductForm.getRawValue(); - - // Remove the currentImageIndex field - delete product.currentImageIndex; - - // Update the product on the server - this._inventoryService.updateProduct(product.id, product).subscribe(() => { - - // Show a success message - this.showFlashMessage('success'); - }); - } - - /** - * Delete the selected product using the form mock-api - */ - deleteSelectedProduct(): void - { - // Get the product object - const product = this.selectedProductForm.getRawValue(); - - // Delete the product on the server - this._inventoryService.deleteProduct(product.id).subscribe(() => { - - // Close the details - this.closeDetails(); - }); - } - - /** - * Show flash message - */ - showFlashMessage(type: 'success' | 'error'): void - { - // Show the message - this.flashMessage = type; - - // Mark for check - this._changeDetectorRef.markForCheck(); - - // Hide it after 3 seconds - setTimeout(() => { - - this.flashMessage = null; - - // Mark for check - this._changeDetectorRef.markForCheck(); - }, 3000); - } - - /** - * Track by function for ngFor loops - * - * @param index - * @param item - */ - trackByFn(index: number, item: any): any - { - return item.id || index; - } -} diff --git a/src/app/modules/admin/apps/file-manager/details/details.component.html b/src/app/modules/admin/apps/file-manager/details/details.component.html deleted file mode 100644 index 55599ee8..00000000 --- a/src/app/modules/admin/apps/file-manager/details/details.component.html +++ /dev/null @@ -1,105 +0,0 @@ -
- - -
- -
- - -
-
- - - - - - -
-
- - -
-
{{item.name}}
-
- {{item.type.toUpperCase()}} -
-
- - -
Information
-
-
-
Created By
-
{{item.createdBy}}
-
-
-
Created At
-
{{item.createdAt}}
-
-
-
Modified At
-
{{item.modifiedAt}}
-
-
-
Size
-
{{item.size}}
-
- -
-
Contents
-
{{item.contents}}
-
-
-
- - -
-
Description
- -
-
-
- -
{{item.description}}
-
- -
Click here to add a description
-
-
-
- - -
- - -
- -
diff --git a/src/app/modules/admin/apps/file-manager/details/details.component.ts b/src/app/modules/admin/apps/file-manager/details/details.component.ts deleted file mode 100644 index da4751b0..00000000 --- a/src/app/modules/admin/apps/file-manager/details/details.component.ts +++ /dev/null @@ -1,91 +0,0 @@ -import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { MatDrawerToggleResult } from '@angular/material/sidenav'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import { FileManagerListComponent } from 'app/modules/admin/apps/file-manager/list/list.component'; -import { FileManagerService } from 'app/modules/admin/apps/file-manager/file-manager.service'; -import { Item } from 'app/modules/admin/apps/file-manager/file-manager.types'; - -@Component({ - selector : 'file-manager-details', - templateUrl : './details.component.html', - encapsulation : ViewEncapsulation.None, - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class FileManagerDetailsComponent implements OnInit, OnDestroy -{ - item: Item; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor( - private _changeDetectorRef: ChangeDetectorRef, - private _fileManagerListComponent: FileManagerListComponent, - private _fileManagerService: FileManagerService - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Open the drawer - this._fileManagerListComponent.matDrawer.open(); - - // Get the item - this._fileManagerService.item$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((item: Item) => { - - // Open the drawer in case it is closed - this._fileManagerListComponent.matDrawer.open(); - - // Get the item - this.item = item; - - // Mark for check - this._changeDetectorRef.markForCheck(); - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Close the drawer - */ - closeDrawer(): Promise - { - return this._fileManagerListComponent.matDrawer.close(); - } - - /** - * Track by function for ngFor loops - * - * @param index - * @param item - */ - trackByFn(index: number, item: any): any - { - return item.id || index; - } -} diff --git a/src/app/modules/admin/apps/file-manager/file-manager.component.html b/src/app/modules/admin/apps/file-manager/file-manager.component.html deleted file mode 100644 index 0680b43f..00000000 --- a/src/app/modules/admin/apps/file-manager/file-manager.component.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/app/modules/admin/apps/file-manager/file-manager.component.ts b/src/app/modules/admin/apps/file-manager/file-manager.component.ts deleted file mode 100644 index 0fa2889b..00000000 --- a/src/app/modules/admin/apps/file-manager/file-manager.component.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core'; - -@Component({ - selector : 'file-manager', - templateUrl : './file-manager.component.html', - encapsulation : ViewEncapsulation.None, - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class FileManagerComponent -{ - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/apps/file-manager/file-manager.guards.ts b/src/app/modules/admin/apps/file-manager/file-manager.guards.ts deleted file mode 100644 index 68a9bbfb..00000000 --- a/src/app/modules/admin/apps/file-manager/file-manager.guards.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { Injectable } from '@angular/core'; -import { ActivatedRouteSnapshot, CanDeactivate, RouterStateSnapshot, UrlTree } from '@angular/router'; -import { Observable } from 'rxjs'; -import { FileManagerDetailsComponent } from 'app/modules/admin/apps/file-manager/details/details.component'; - -@Injectable({ - providedIn: 'root' -}) -export class CanDeactivateFileManagerDetails implements CanDeactivate -{ - canDeactivate( - component: FileManagerDetailsComponent, - currentRoute: ActivatedRouteSnapshot, - currentState: RouterStateSnapshot, - nextState: RouterStateSnapshot - ): Observable | Promise | boolean | UrlTree - { - // Get the next route - let nextRoute: ActivatedRouteSnapshot = nextState.root; - while ( nextRoute.firstChild ) - { - nextRoute = nextRoute.firstChild; - } - - // If the next state doesn't contain '/files' - // it means we are navigating away from the - // tasks app - if ( !nextState.url.includes('/file-manager') ) - { - // Let it navigate - return true; - } - - // If we are navigating to another task... - if ( nextRoute.paramMap.get('id') ) - { - // Just navigate - return true; - } - // Otherwise... - else - { - // Close the drawer first, and then navigate - return component.closeDrawer().then(() => { - return true; - }); - } - } -} diff --git a/src/app/modules/admin/apps/file-manager/file-manager.module.ts b/src/app/modules/admin/apps/file-manager/file-manager.module.ts deleted file mode 100644 index 81582b8f..00000000 --- a/src/app/modules/admin/apps/file-manager/file-manager.module.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { MatButtonModule } from '@angular/material/button'; -import { MatIconModule } from '@angular/material/icon'; -import { MatSidenavModule } from '@angular/material/sidenav'; -import { MatTooltipModule } from '@angular/material/tooltip'; -import { SharedModule } from 'app/shared/shared.module'; -import { fileManagerRoutes } from 'app/modules/admin/apps/file-manager/file-manager.routing'; -import { FileManagerComponent } from 'app/modules/admin/apps/file-manager/file-manager.component'; -import { FileManagerDetailsComponent } from 'app/modules/admin/apps/file-manager/details/details.component'; -import { FileManagerListComponent } from 'app/modules/admin/apps/file-manager/list/list.component'; - -@NgModule({ - declarations: [ - FileManagerComponent, - FileManagerDetailsComponent, - FileManagerListComponent - ], - imports : [ - RouterModule.forChild(fileManagerRoutes), - MatButtonModule, - MatIconModule, - MatSidenavModule, - MatTooltipModule, - SharedModule - ] -}) -export class FileManagerModule -{ -} diff --git a/src/app/modules/admin/apps/file-manager/file-manager.resolvers.ts b/src/app/modules/admin/apps/file-manager/file-manager.resolvers.ts deleted file mode 100644 index b1138b80..00000000 --- a/src/app/modules/admin/apps/file-manager/file-manager.resolvers.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { Injectable } from '@angular/core'; -import { ActivatedRouteSnapshot, Resolve, Router, RouterStateSnapshot } from '@angular/router'; -import { Observable, throwError } from 'rxjs'; -import { catchError } from 'rxjs/operators'; -import { FileManagerService } from 'app/modules/admin/apps/file-manager/file-manager.service'; -import { Item } from 'app/modules/admin/apps/file-manager/file-manager.types'; - -@Injectable({ - providedIn: 'root' -}) -export class FileManagerItemsResolver implements Resolve -{ - /** - * Constructor - */ - constructor(private _fileManagerService: FileManagerService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Resolver - * - * @param route - * @param state - */ - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable - { - return this._fileManagerService.getItems(); - } -} - -@Injectable({ - providedIn: 'root' -}) -export class FileManagerItemResolver implements Resolve -{ - /** - * Constructor - */ - constructor( - private _router: Router, - private _fileManagerService: FileManagerService - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Resolver - * - * @param route - * @param state - */ - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable - { - return this._fileManagerService.getItemById(route.paramMap.get('id')) - .pipe( - // Error here means the requested task is not available - catchError((error) => { - - // Log the error - console.error(error); - - // Get the parent url - const parentUrl = state.url.split('/').slice(0, -1).join('/'); - - // Navigate to there - this._router.navigateByUrl(parentUrl); - - // Throw an error - return throwError(error); - }) - ); - } -} diff --git a/src/app/modules/admin/apps/file-manager/file-manager.routing.ts b/src/app/modules/admin/apps/file-manager/file-manager.routing.ts deleted file mode 100644 index db36be9d..00000000 --- a/src/app/modules/admin/apps/file-manager/file-manager.routing.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { Route } from '@angular/router'; -import { CanDeactivateFileManagerDetails } from 'app/modules/admin/apps/file-manager/file-manager.guards'; -import { FileManagerComponent } from 'app/modules/admin/apps/file-manager/file-manager.component'; -import { FileManagerListComponent } from 'app/modules/admin/apps/file-manager/list/list.component'; -import { FileManagerDetailsComponent } from 'app/modules/admin/apps/file-manager/details/details.component'; -import { FileManagerItemResolver, FileManagerItemsResolver } from 'app/modules/admin/apps/file-manager/file-manager.resolvers'; - -export const fileManagerRoutes: Route[] = [ - { - path : '', - component: FileManagerComponent, - children : [ - { - path : '', - component: FileManagerListComponent, - resolve : { - items: FileManagerItemsResolver - }, - children : [ - { - path : ':id', - component : FileManagerDetailsComponent, - resolve : { - item: FileManagerItemResolver - }, - canDeactivate: [CanDeactivateFileManagerDetails] - } - ] - } - ] - } -]; diff --git a/src/app/modules/admin/apps/file-manager/file-manager.service.ts b/src/app/modules/admin/apps/file-manager/file-manager.service.ts deleted file mode 100644 index 0f89e9e5..00000000 --- a/src/app/modules/admin/apps/file-manager/file-manager.service.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient } from '@angular/common/http'; -import { BehaviorSubject, Observable, of, throwError } from 'rxjs'; -import { map, switchMap, take, tap } from 'rxjs/operators'; -import { Item, Items } from 'app/modules/admin/apps/file-manager/file-manager.types'; - -@Injectable({ - providedIn: 'root' -}) -export class FileManagerService -{ - // Private - private _item: BehaviorSubject = new BehaviorSubject(null); - private _items: BehaviorSubject = new BehaviorSubject(null); - - /** - * Constructor - */ - constructor(private _httpClient: HttpClient) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Accessors - // ----------------------------------------------------------------------------------------------------- - - /** - * Getter for items - */ - get items$(): Observable - { - return this._items.asObservable(); - } - - /** - * Getter for item - */ - get item$(): Observable - { - return this._item.asObservable(); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Get items - */ - getItems(): Observable - { - return this._httpClient.get('api/apps/file-manager').pipe( - tap((response: any) => { - this._items.next(response); - }) - ); - } - - /** - * Get item by id - */ - getItemById(id: string): Observable - { - return this._items.pipe( - take(1), - map((items) => { - - // Find within the folders and files - const item = [...items.folders, ...items.files].find(value => value.id === id) || null; - - // Update the item - this._item.next(item); - - // Return the item - return item; - }), - switchMap((item) => { - - if ( !item ) - { - return throwError('Could not found the item with id of ' + id + '!'); - } - - return of(item); - }) - ); - } -} diff --git a/src/app/modules/admin/apps/file-manager/file-manager.types.ts b/src/app/modules/admin/apps/file-manager/file-manager.types.ts deleted file mode 100644 index c779ca9b..00000000 --- a/src/app/modules/admin/apps/file-manager/file-manager.types.ts +++ /dev/null @@ -1,18 +0,0 @@ -export interface Items -{ - folders: Item[]; - files: Item[]; -} - -export interface Item -{ - id?: string; - name?: string; - createdBy?: string; - createdAt?: string; - modifiedAt?: string; - size?: string; - type?: string; - contents?: string | null; - description?: string | null; -} diff --git a/src/app/modules/admin/apps/file-manager/list/list.component.html b/src/app/modules/admin/apps/file-manager/list/list.component.html deleted file mode 100644 index 83cc8b75..00000000 --- a/src/app/modules/admin/apps/file-manager/list/list.component.html +++ /dev/null @@ -1,133 +0,0 @@ -
- - - - - - - - - - - -
- - -
- -
-
File Manager
-
- {{items.folders.length}} folders, {{items.files.length}} files -
-
- -
- - -
-
- - - -
- -
Folders
-
- - - -
- - -
Files
-
- - - -
-
-
- - - -
-
-
- - - - - - - - -
- -
- {{item.type.toUpperCase()}} -
-
-
-
-
-
-
-
{{item.name}}
- -
{{item.contents}}
-
-
-
-
- - - -
- -
There are no items!
-
-
- -
- -
- -
- -
diff --git a/src/app/modules/admin/apps/file-manager/list/list.component.ts b/src/app/modules/admin/apps/file-manager/list/list.component.ts deleted file mode 100644 index 5c65d394..00000000 --- a/src/app/modules/admin/apps/file-manager/list/list.component.ts +++ /dev/null @@ -1,147 +0,0 @@ -import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, OnDestroy, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; -import { DOCUMENT } from '@angular/common'; -import { ActivatedRoute, Router } from '@angular/router'; -import { MatDrawer } from '@angular/material/sidenav'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import { FuseMediaWatcherService } from '@fuse/services/media-watcher'; -import { FuseNavigationService } from '@fuse/components/navigation'; -import { FileManagerService } from 'app/modules/admin/apps/file-manager/file-manager.service'; -import { Item, Items } from 'app/modules/admin/apps/file-manager/file-manager.types'; - -@Component({ - selector : 'file-manager-list', - templateUrl : './list.component.html', - encapsulation : ViewEncapsulation.None, - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class FileManagerListComponent implements OnInit, OnDestroy -{ - @ViewChild('matDrawer', {static: true}) matDrawer: MatDrawer; - drawerMode: 'side' | 'over'; - selectedItem: Item; - items: Items; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor( - private _activatedRoute: ActivatedRoute, - private _changeDetectorRef: ChangeDetectorRef, - @Inject(DOCUMENT) private _document: any, - private _router: Router, - private _fileManagerService: FileManagerService, - private _fuseMediaWatcherService: FuseMediaWatcherService, - private _fuseNavigationService: FuseNavigationService - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Get the items - this._fileManagerService.items$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((items: Items) => { - this.items = items; - - // Mark for check - this._changeDetectorRef.markForCheck(); - }); - - // Get the item - this._fileManagerService.item$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((item: Item) => { - this.selectedItem = item; - - // Mark for check - this._changeDetectorRef.markForCheck(); - }); - - // Subscribe to media query change - this._fuseMediaWatcherService.onMediaQueryChange$('(min-width: 1440px)') - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((state) => { - - // Calculate the drawer mode - this.drawerMode = state.matches ? 'side' : 'over'; - - // Mark for check - this._changeDetectorRef.markForCheck(); - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Go to item - * - * @param id - */ - goToItem(id: string): void - { - // Get the current activated route - let route = this._activatedRoute; - while ( route.firstChild ) - { - route = route.firstChild; - } - - // Go to item - this._router.navigate(['../', id], {relativeTo: route}); - - // Mark for check - this._changeDetectorRef.markForCheck(); - } - - /** - * On backdrop clicked - */ - onBackdropClicked(): void - { - // Get the current activated route - let route = this._activatedRoute; - while ( route.firstChild ) - { - route = route.firstChild; - } - - // Go back to the parent route - this._router.navigate(['../'], {relativeTo: route}); - - // Mark for check - this._changeDetectorRef.markForCheck(); - } - - /** - * Track by function for ngFor loops - * - * @param index - * @param item - */ - trackByFn(index: number, item: any): any - { - return item.id || index; - } -} diff --git a/src/app/modules/admin/apps/help-center/faqs/faqs.component.html b/src/app/modules/admin/apps/help-center/faqs/faqs.component.html deleted file mode 100644 index e50cd9c3..00000000 --- a/src/app/modules/admin/apps/help-center/faqs/faqs.component.html +++ /dev/null @@ -1,32 +0,0 @@ -
- - -
-
-
- -
-
- Frequently Asked Questions -
- -
{{faqCategory.title}}
- - - - {{faq.question}} - - {{faq.answer}} - - -
-
-
- -
diff --git a/src/app/modules/admin/apps/help-center/faqs/faqs.component.ts b/src/app/modules/admin/apps/help-center/faqs/faqs.component.ts deleted file mode 100644 index c820d2d3..00000000 --- a/src/app/modules/admin/apps/help-center/faqs/faqs.component.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import { HelpCenterService } from 'app/modules/admin/apps/help-center/help-center.service'; -import { FaqCategory } from 'app/modules/admin/apps/help-center/help-center.type'; - -@Component({ - selector : 'help-center-faqs', - templateUrl : './faqs.component.html', - encapsulation: ViewEncapsulation.None -}) -export class HelpCenterFaqsComponent implements OnInit, OnDestroy -{ - faqCategories: FaqCategory[]; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor(private _helpCenterService: HelpCenterService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Get the FAQs - this._helpCenterService.faqs$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((faqCategories) => { - this.faqCategories = faqCategories; - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Track by function for ngFor loops - * - * @param index - * @param item - */ - trackByFn(index: number, item: any): any - { - return item.id || index; - } -} diff --git a/src/app/modules/admin/apps/help-center/guides/category/category.component.html b/src/app/modules/admin/apps/help-center/guides/category/category.component.html deleted file mode 100644 index ded38c91..00000000 --- a/src/app/modules/admin/apps/help-center/guides/category/category.component.html +++ /dev/null @@ -1,30 +0,0 @@ -
- - -
-
-
- -
-
- {{guideCategory.title}} -
- - -
-
-
diff --git a/src/app/modules/admin/apps/help-center/guides/category/category.component.ts b/src/app/modules/admin/apps/help-center/guides/category/category.component.ts deleted file mode 100644 index 06a81863..00000000 --- a/src/app/modules/admin/apps/help-center/guides/category/category.component.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { ActivatedRoute, Router } from '@angular/router'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import { HelpCenterService } from 'app/modules/admin/apps/help-center/help-center.service'; -import { GuideCategory } from 'app/modules/admin/apps/help-center/help-center.type'; - -@Component({ - selector : 'help-center-guides-category', - templateUrl : './category.component.html', - encapsulation: ViewEncapsulation.None -}) -export class HelpCenterGuidesCategoryComponent implements OnInit, OnDestroy -{ - guideCategory: GuideCategory; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor( - private _activatedRoute: ActivatedRoute, - private _helpCenterService: HelpCenterService, - private _router: Router - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Get the Guides - this._helpCenterService.guides$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((guideCategories) => { - this.guideCategory = guideCategories[0]; - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Track by function for ngFor loops - * - * @param index - * @param item - */ - trackByFn(index: number, item: any): any - { - return item.id || index; - } -} diff --git a/src/app/modules/admin/apps/help-center/guides/guide/guide.component.html b/src/app/modules/admin/apps/help-center/guides/guide/guide.component.html deleted file mode 100644 index f5a02ab3..00000000 --- a/src/app/modules/admin/apps/help-center/guides/guide/guide.component.html +++ /dev/null @@ -1,52 +0,0 @@ -
- - -
-
-
- -
-
{{guideCategory.guides[0].title}}
-
{{guideCategory.guides[0].subtitle}}
- - -
- -
-
Last updated 2 months ago
-
-
Was this page helpful?
-
- - -
-
-
- - - -
-
Next
-
Removing a media from a project
-
- -
-
-
-
diff --git a/src/app/modules/admin/apps/help-center/guides/guide/guide.component.ts b/src/app/modules/admin/apps/help-center/guides/guide/guide.component.ts deleted file mode 100644 index c89c3cbb..00000000 --- a/src/app/modules/admin/apps/help-center/guides/guide/guide.component.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import { HelpCenterService } from 'app/modules/admin/apps/help-center/help-center.service'; -import { GuideCategory } from 'app/modules/admin/apps/help-center/help-center.type'; - -@Component({ - selector : 'help-center-guides-guide', - templateUrl : './guide.component.html', - encapsulation: ViewEncapsulation.None -}) -export class HelpCenterGuidesGuideComponent implements OnInit, OnDestroy -{ - guideCategory: GuideCategory; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor(private _helpCenterService: HelpCenterService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Get the Guides - this._helpCenterService.guide$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((guideCategory) => { - this.guideCategory = guideCategory; - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Track by function for ngFor loops - * - * @param index - * @param item - */ - trackByFn(index: number, item: any): any - { - return item.id || index; - } -} diff --git a/src/app/modules/admin/apps/help-center/guides/guides.component.html b/src/app/modules/admin/apps/help-center/guides/guides.component.html deleted file mode 100644 index 44ac0df5..00000000 --- a/src/app/modules/admin/apps/help-center/guides/guides.component.html +++ /dev/null @@ -1,48 +0,0 @@ -
- - -
-
-
- -
-
- Guides & Resources -
- - -
-
-
diff --git a/src/app/modules/admin/apps/help-center/guides/guides.component.ts b/src/app/modules/admin/apps/help-center/guides/guides.component.ts deleted file mode 100644 index 018e32e6..00000000 --- a/src/app/modules/admin/apps/help-center/guides/guides.component.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import { HelpCenterService } from 'app/modules/admin/apps/help-center/help-center.service'; -import { GuideCategory } from 'app/modules/admin/apps/help-center/help-center.type'; - -@Component({ - selector : 'help-center-guides', - templateUrl : './guides.component.html', - encapsulation: ViewEncapsulation.None -}) -export class HelpCenterGuidesComponent implements OnInit, OnDestroy -{ - guideCategories: GuideCategory[]; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor(private _helpCenterService: HelpCenterService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Get the Guide categories - this._helpCenterService.guides$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((guideCategories) => { - this.guideCategories = guideCategories; - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Track by function for ngFor loops - * - * @param index - * @param item - */ - trackByFn(index: number, item: any): any - { - return item.id || index; - } -} diff --git a/src/app/modules/admin/apps/help-center/help-center.component.html b/src/app/modules/admin/apps/help-center/help-center.component.html deleted file mode 100644 index eda3d4e4..00000000 --- a/src/app/modules/admin/apps/help-center/help-center.component.html +++ /dev/null @@ -1,104 +0,0 @@ -
- - -
- - - - - - - - - -
-

HELP CENTER

-
- How can we help you today? -
-
- Search for a topic or question, check out our FAQs and guides, contact us for detailed support -
- - - - -
-
- -
- -
- -
-
-
FAQs
-
Frequently asked questions and answers
-
- -
- -
-
-
Guides
-
Articles and resources to guide you
-
- -
- -
-
-
Support
-
Contact us for more detailed support
-
- -
-
- -
Most frequently asked questions
-
Here are the most frequently asked questions you may check before getting started
- - - - {{faq.question}} - - {{faq.answer}} - - -
-
diff --git a/src/app/modules/admin/apps/help-center/help-center.component.ts b/src/app/modules/admin/apps/help-center/help-center.component.ts deleted file mode 100644 index a242e62b..00000000 --- a/src/app/modules/admin/apps/help-center/help-center.component.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import { HelpCenterService } from 'app/modules/admin/apps/help-center/help-center.service'; -import { FaqCategory } from 'app/modules/admin/apps/help-center/help-center.type'; - -@Component({ - selector : 'help-center', - templateUrl : './help-center.component.html', - encapsulation: ViewEncapsulation.None -}) -export class HelpCenterComponent implements OnInit, OnDestroy -{ - faqCategory: FaqCategory; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor(private _helpCenterService: HelpCenterService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Get the FAQs - this._helpCenterService.faqs$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((faqCategories) => { - this.faqCategory = faqCategories[0]; - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Track by function for ngFor loops - * - * @param index - * @param item - */ - trackByFn(index: number, item: any): any - { - return item.id || index; - } -} diff --git a/src/app/modules/admin/apps/help-center/help-center.module.ts b/src/app/modules/admin/apps/help-center/help-center.module.ts deleted file mode 100644 index eb22b864..00000000 --- a/src/app/modules/admin/apps/help-center/help-center.module.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { MatButtonModule } from '@angular/material/button'; -import { MatExpansionModule } from '@angular/material/expansion'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatIconModule } from '@angular/material/icon'; -import { MatInputModule } from '@angular/material/input'; -import { FuseAlertModule } from '@fuse/components/alert'; -import { SharedModule } from 'app/shared/shared.module'; -import { HelpCenterComponent } from 'app/modules/admin/apps/help-center/help-center.component'; -import { HelpCenterFaqsComponent } from 'app/modules/admin/apps/help-center/faqs/faqs.component'; -import { HelpCenterGuidesComponent } from 'app/modules/admin/apps/help-center/guides/guides.component'; -import { HelpCenterGuidesCategoryComponent } from 'app/modules/admin/apps/help-center/guides/category/category.component'; -import { HelpCenterGuidesGuideComponent } from 'app/modules/admin/apps/help-center/guides/guide/guide.component'; -import { HelpCenterSupportComponent } from 'app/modules/admin/apps/help-center/support/support.component'; -import { helpCenterRoutes } from 'app/modules/admin/apps/help-center/help-center.routing'; - -@NgModule({ - declarations: [ - HelpCenterComponent, - HelpCenterFaqsComponent, - HelpCenterGuidesComponent, - HelpCenterGuidesCategoryComponent, - HelpCenterGuidesGuideComponent, - HelpCenterSupportComponent - ], - imports : [ - RouterModule.forChild(helpCenterRoutes), - MatButtonModule, - MatExpansionModule, - MatFormFieldModule, - MatIconModule, - MatInputModule, - FuseAlertModule, - SharedModule - ] -}) -export class HelpCenterModule -{ -} diff --git a/src/app/modules/admin/apps/help-center/help-center.resolvers.ts b/src/app/modules/admin/apps/help-center/help-center.resolvers.ts deleted file mode 100644 index 50d85fab..00000000 --- a/src/app/modules/admin/apps/help-center/help-center.resolvers.ts +++ /dev/null @@ -1,145 +0,0 @@ -import { Injectable } from '@angular/core'; -import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router'; -import { Observable } from 'rxjs'; -import { HelpCenterService } from 'app/modules/admin/apps/help-center/help-center.service'; -import { FaqCategory, GuideCategory } from 'app/modules/admin/apps/help-center/help-center.type'; - -@Injectable({ - providedIn: 'root' -}) -export class HelpCenterMostAskedFaqsResolver implements Resolve -{ - /** - * Constructor - */ - constructor(private _helpCenterService: HelpCenterService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Resolver - * - * @param route - * @param state - */ - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable - { - return this._helpCenterService.getFaqsByCategory('most-asked'); - } -} - -@Injectable({ - providedIn: 'root' -}) -export class HelpCenterFaqsResolver implements Resolve -{ - /** - * Constructor - */ - constructor(private _helpCenterService: HelpCenterService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Resolver - * - * @param route - * @param state - */ - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable - { - return this._helpCenterService.getAllFaqs(); - } -} - -@Injectable({ - providedIn: 'root' -}) -export class HelpCenterGuidesResolver implements Resolve -{ - /** - * Constructor - */ - constructor(private _helpCenterService: HelpCenterService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Resolver - * - * @param route - * @param state - */ - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable - { - return this._helpCenterService.getAllGuides(); - } -} - -@Injectable({ - providedIn: 'root' -}) -export class HelpCenterGuidesCategoryResolver implements Resolve -{ - /** - * Constructor - */ - constructor(private _helpCenterService: HelpCenterService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Resolver - * - * @param route - * @param state - */ - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable - { - return this._helpCenterService.getGuidesByCategory(route.paramMap.get('categorySlug')); - } -} - -@Injectable({ - providedIn: 'root' -}) -export class HelpCenterGuidesGuideResolver implements Resolve -{ - /** - * Constructor - */ - constructor(private _helpCenterService: HelpCenterService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Resolver - * - * @param route - * @param state - */ - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable - { - return this._helpCenterService.getGuide(route.parent.paramMap.get('categorySlug'), route.paramMap.get('guideSlug')); - } -} diff --git a/src/app/modules/admin/apps/help-center/help-center.routing.ts b/src/app/modules/admin/apps/help-center/help-center.routing.ts deleted file mode 100644 index 98fb878c..00000000 --- a/src/app/modules/admin/apps/help-center/help-center.routing.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { Route } from '@angular/router'; -import { HelpCenterComponent } from 'app/modules/admin/apps/help-center/help-center.component'; -import { HelpCenterFaqsComponent } from 'app/modules/admin/apps/help-center/faqs/faqs.component'; -import { HelpCenterGuidesComponent } from 'app/modules/admin/apps/help-center/guides/guides.component'; -import { HelpCenterGuidesCategoryComponent } from 'app/modules/admin/apps/help-center/guides/category/category.component'; -import { HelpCenterGuidesGuideComponent } from 'app/modules/admin/apps/help-center/guides/guide/guide.component'; -import { HelpCenterSupportComponent } from 'app/modules/admin/apps/help-center/support/support.component'; -import { HelpCenterFaqsResolver, HelpCenterGuidesCategoryResolver, HelpCenterGuidesGuideResolver, HelpCenterGuidesResolver, HelpCenterMostAskedFaqsResolver } from 'app/modules/admin/apps/help-center/help-center.resolvers'; - -export const helpCenterRoutes: Route[] = [ - { - path : '', - component: HelpCenterComponent, - resolve : { - faqs: HelpCenterMostAskedFaqsResolver - } - }, - { - path : 'faqs', - component: HelpCenterFaqsComponent, - resolve : { - faqs: HelpCenterFaqsResolver - } - }, - { - path : 'guides', - children: [ - { - path : '', - component: HelpCenterGuidesComponent, - resolve : { - guides: HelpCenterGuidesResolver - } - }, - { - path : ':categorySlug', - children: [ - { - path : '', - component: HelpCenterGuidesCategoryComponent, - resolve : { - guides: HelpCenterGuidesCategoryResolver - } - }, - { - path : ':guideSlug', - component: HelpCenterGuidesGuideComponent, - resolve : { - guide: HelpCenterGuidesGuideResolver - } - } - ] - } - ] - }, - { - path : 'support', - component: HelpCenterSupportComponent - } -]; diff --git a/src/app/modules/admin/apps/help-center/help-center.service.ts b/src/app/modules/admin/apps/help-center/help-center.service.ts deleted file mode 100644 index df9f03d9..00000000 --- a/src/app/modules/admin/apps/help-center/help-center.service.ts +++ /dev/null @@ -1,134 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient } from '@angular/common/http'; -import { Observable, ReplaySubject } from 'rxjs'; -import { tap } from 'rxjs/operators'; -import { FaqCategory, Guide, GuideCategory } from 'app/modules/admin/apps/help-center/help-center.type'; - -@Injectable({ - providedIn: 'root' -}) -export class HelpCenterService -{ - private _faqs: ReplaySubject = new ReplaySubject(1); - private _guides: ReplaySubject = new ReplaySubject(1); - private _guide: ReplaySubject = new ReplaySubject(1); - - /** - * Constructor - */ - constructor(private _httpClient: HttpClient) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Accessors - // ----------------------------------------------------------------------------------------------------- - - /** - * Getter for FAQs - */ - get faqs$(): Observable - { - return this._faqs.asObservable(); - } - - /** - * Getter for guides - */ - get guides$(): Observable - { - return this._guides.asObservable(); - } - - /** - * Getter for guide - */ - get guide$(): Observable - { - return this._guide.asObservable(); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Get all FAQs - */ - getAllFaqs(): Observable - { - return this._httpClient.get('api/apps/help-center/faqs').pipe( - tap((response: any) => { - this._faqs.next(response); - }) - ); - } - - /** - * Get FAQs by category using category slug - * - * @param slug - */ - getFaqsByCategory(slug: string): Observable - { - return this._httpClient.get('api/apps/help-center/faqs', { - params: {slug} - }).pipe( - tap((response: any) => { - this._faqs.next(response); - }) - ); - } - - /** - * Get all guides limited per category by the given number - * - * @param limit - */ - getAllGuides(limit = '4'): Observable - { - return this._httpClient.get('api/apps/help-center/guides', { - params: {limit} - }).pipe( - tap((response: any) => { - this._guides.next(response); - }) - ); - } - - /** - * Get guides by category using category slug - * - * @param slug - */ - getGuidesByCategory(slug: string): Observable - { - return this._httpClient.get('api/apps/help-center/guides', { - params: {slug} - }).pipe( - tap((response: any) => { - this._guides.next(response); - }) - ); - } - - /** - * Get guide by category and guide slug - * - * @param categorySlug - * @param guideSlug - */ - getGuide(categorySlug: string, guideSlug: string): Observable - { - return this._httpClient.get('api/apps/help-center/guide', { - params: { - categorySlug, - guideSlug - } - }).pipe( - tap((response: any) => { - this._guide.next(response); - }) - ); - } -} diff --git a/src/app/modules/admin/apps/help-center/help-center.type.ts b/src/app/modules/admin/apps/help-center/help-center.type.ts deleted file mode 100644 index dd6328df..00000000 --- a/src/app/modules/admin/apps/help-center/help-center.type.ts +++ /dev/null @@ -1,35 +0,0 @@ -export interface FaqCategory -{ - id: string; - slug: string; - title: string; - faqs?: Faq[]; -} - -export interface Faq -{ - id: string; - categoryId: string; - question: string; - answer: string; -} - -export interface GuideCategory -{ - id: string; - slug: string; - title: string; - totalGuides?: number; - visibleGuides?: number; - guides?: Guide[]; -} - -export interface Guide -{ - id: string; - categoryId: string; - slug: string; - title: string; - subtitle?: string; - content?: string; -} diff --git a/src/app/modules/admin/apps/help-center/support/support.component.html b/src/app/modules/admin/apps/help-center/support/support.component.html deleted file mode 100644 index 216153cf..00000000 --- a/src/app/modules/admin/apps/help-center/support/support.component.html +++ /dev/null @@ -1,109 +0,0 @@ -
- - -
-
-
- -
-
- Contact support -
- -
- - - {{alert.message}} - -
-
-
Submit your request
-
Your request will be processed and our support staff will get back to you in 24 hours.
-
- - - - Name - - Required - - - - - - Email - - Required - - - Enter a valid email address - - - - - - Subject - - Required - - - - - - Message - - Required - - - -
- - -
-
-
-
-
-
diff --git a/src/app/modules/admin/apps/help-center/support/support.component.ts b/src/app/modules/admin/apps/help-center/support/support.component.ts deleted file mode 100644 index 77714f31..00000000 --- a/src/app/modules/admin/apps/help-center/support/support.component.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, NgForm, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { HelpCenterService } from 'app/modules/admin/apps/help-center/help-center.service'; - -@Component({ - selector : 'help-center-support', - templateUrl : './support.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class HelpCenterSupportComponent implements OnInit -{ - @ViewChild('supportNgForm') supportNgForm: NgForm; - - alert: any; - supportForm: FormGroup; - - /** - * Constructor - */ - constructor( - private _formBuilder: FormBuilder, - private _helpCenterService: HelpCenterService - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the support form - this.supportForm = this._formBuilder.group({ - name : ['', Validators.required], - email : ['', [Validators.required, Validators.email]], - subject: ['', Validators.required], - message: ['', Validators.required] - }); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Clear the form - */ - clearForm(): void - { - // Reset the form - this.supportNgForm.resetForm(); - } - - /** - * Send the form - */ - sendForm(): void - { - // Send your form here using an http request - console.log('Your message has been sent!'); - - // Show a success message (it can also be an error message) - // and remove it after 5 seconds - this.alert = { - type : 'success', - message: 'Your request has been delivered! A member of our support staff will respond as soon as possible.' - }; - - setTimeout(() => { - this.alert = null; - }, 7000); - - // Clear the form - this.clearForm(); - } -} diff --git a/src/app/modules/admin/apps/mailbox/compose/compose.component.html b/src/app/modules/admin/apps/mailbox/compose/compose.component.html deleted file mode 100644 index 6179e661..00000000 --- a/src/app/modules/admin/apps/mailbox/compose/compose.component.html +++ /dev/null @@ -1,132 +0,0 @@ -
- - -
-
New Message
- -
- - -
- - - - To - -
- - Cc - - - Bcc - -
-
- - - - Cc - - - - - - Bcc - - - - - - Subject - - - - - - - -
-
- - - - - - - - -
- -
- - - - - - -
-
-
-
diff --git a/src/app/modules/admin/apps/mailbox/compose/compose.component.ts b/src/app/modules/admin/apps/mailbox/compose/compose.component.ts deleted file mode 100644 index 7b8dccf6..00000000 --- a/src/app/modules/admin/apps/mailbox/compose/compose.component.ts +++ /dev/null @@ -1,110 +0,0 @@ -import { Component, OnInit, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { MatDialogRef } from '@angular/material/dialog'; - -@Component({ - selector : 'mailbox-compose', - templateUrl : './compose.component.html', - encapsulation: ViewEncapsulation.None -}) -export class MailboxComposeComponent implements OnInit -{ - composeForm: FormGroup; - copyFields: { cc: boolean, bcc: boolean } = { - cc : false, - bcc: false - }; - quillModules: any = { - toolbar: [ - ['bold', 'italic', 'underline'], - [{align: []}, {list: 'ordered'}, {list: 'bullet'}], - ['clean'] - ] - }; - - /** - * Constructor - */ - constructor( - public matDialogRef: MatDialogRef, - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.composeForm = this._formBuilder.group({ - to : ['', [Validators.required, Validators.email]], - cc : ['', [Validators.email]], - bcc : ['', [Validators.email]], - subject: [''], - body : ['', [Validators.required]] - }); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Show the copy field with the given field name - * - * @param name - */ - showCopyField(name: string): void - { - // Return if the name is not one of the available names - if ( name !== 'cc' && name !== 'bcc' ) - { - return; - } - - // Show the field - this.copyFields[name] = true; - } - - /** - * Save and close - */ - saveAndClose(): void - { - // Save the message as a draft - this.saveAsDraft(); - - // Close the dialog - this.matDialogRef.close(); - } - - /** - * Discard the message - */ - discard(): void - { - - } - - /** - * Save the message as a draft - */ - saveAsDraft(): void - { - - } - - /** - * Send the message - */ - send(): void - { - - } -} diff --git a/src/app/modules/admin/apps/mailbox/details/details.component.html b/src/app/modules/admin/apps/mailbox/details/details.component.html deleted file mode 100644 index 755aad04..00000000 --- a/src/app/modules/admin/apps/mailbox/details/details.component.html +++ /dev/null @@ -1,409 +0,0 @@ -
- - - - -
- - -
- - - - - - - - - - -
- - {{label.title}} - -
-
-
- - - - - - - - - - - - - - - - - - - -
- - -
- -
{{mail.subject}}
- - -
- -
- {{label.title}} -
-
-
-
-
- -
- - -
- - -
- -
- - -
- - -
- User avatar -
- - -
- - -
{{mail.from.contact.split('<')[0].trim()}}
- - -
-
to
-
me
- -
- and - {{mail.ccCount + mail.bccCount}} - - other - others - -
-
- - - - - - -
- -
-
from:
-
{{mail.from.contact}}
-
- -
-
to:
-
{{mail.to}}
-
- - -
-
cc:
-
{{mail.cc.join(',\n')}}
-
-
- - -
-
bcc:
-
{{mail.bcc.join(',\n')}}
-
-
- -
-
date:
-
{{mail.date | date:'EEEE, MMMM d, y - hh:mm a'}}
-
- -
-
subject:
-
{{mail.subject}}
-
-
-
-
- -
- -
- - -
-
- - - -
- -
- -
{{mail.attachments.length}} Attachments
-
- - -
- -
- - -
-
- {{attachment.type.split('/')[1].trim().toUpperCase()}} -
-
- -
-
- {{attachment.name}} -
-
- {{attachment.size / 1000 | number:'1.0-2'}} KB -
-
-
-
-
-
-
- -
- - -
- - - -
- - - - - - -
-
- - - -
- - - - - -
-
- - - - - - - - -
- -
- - - - -
-
-
-
- -
- -
- -
- -
- - - - -
- -
Select a mail to read
-
- -
- -
diff --git a/src/app/modules/admin/apps/mailbox/details/details.component.ts b/src/app/modules/admin/apps/mailbox/details/details.component.ts deleted file mode 100644 index e75dddfa..00000000 --- a/src/app/modules/admin/apps/mailbox/details/details.component.ts +++ /dev/null @@ -1,375 +0,0 @@ -import { Component, ElementRef, OnDestroy, OnInit, TemplateRef, ViewChild, ViewContainerRef, ViewEncapsulation } from '@angular/core'; -import { ActivatedRoute, Router } from '@angular/router'; -import { TemplatePortal } from '@angular/cdk/portal'; -import { Overlay, OverlayRef } from '@angular/cdk/overlay'; -import { MatButton } from '@angular/material/button'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import { MailboxService } from 'app/modules/admin/apps/mailbox/mailbox.service'; -import { Mail, MailFolder, MailLabel } from 'app/modules/admin/apps/mailbox/mailbox.types'; -import { labelColorDefs } from 'app/modules/admin/apps/mailbox/mailbox.constants'; - -@Component({ - selector : 'mailbox-details', - templateUrl : './details.component.html', - encapsulation: ViewEncapsulation.None -}) -export class MailboxDetailsComponent implements OnInit, OnDestroy -{ - @ViewChild('infoDetailsPanelOrigin') private _infoDetailsPanelOrigin: MatButton; - @ViewChild('infoDetailsPanel') private _infoDetailsPanel: TemplateRef; - - folders: MailFolder[]; - labelColors: any; - labels: MailLabel[]; - mail: Mail; - replyFormActive: boolean = false; - private _overlayRef: OverlayRef; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor( - private _activatedRoute: ActivatedRoute, - private _elementRef: ElementRef, - private _mailboxService: MailboxService, - private _overlay: Overlay, - private _router: Router, - private _viewContainerRef: ViewContainerRef - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Get the label colors - this.labelColors = labelColorDefs; - - // Folders - this._mailboxService.folders$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((folders: MailFolder[]) => { - this.folders = folders; - }); - - // Labels - this._mailboxService.labels$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((labels: MailLabel[]) => { - this.labels = labels; - }); - - // Mail - this._mailboxService.mail$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((mail: Mail) => { - this.mail = mail; - }); - - // Selected mail changed - this._mailboxService.selectedMailChanged - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe(() => { - - // De-activate the reply form - this.replyFormActive = false; - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Get the current folder - */ - getCurrentFolder(): any - { - return this._activatedRoute.snapshot.paramMap.get('folder'); - } - - /** - * Move to folder - * - * @param folderSlug - */ - moveToFolder(folderSlug: string): void - { - // Find the folder details - const folder = this.folders.find((item) => { - return item.slug === folderSlug; - }); - - // Return if the current folder of the mail - // is already equals to the given folder - if ( this.mail.folder === folder.id ) - { - return; - } - - // Update the mail object - this.mail.folder = folder.id; - - // Update the mail on the server - this._mailboxService.updateMail(this.mail.id, {folder: this.mail.folder}).subscribe(); - - // Navigate to the parent - this._router.navigate(['./'], {relativeTo: this._activatedRoute.parent}); - } - - /** - * Toggle label - * - * @param label - */ - toggleLabel(label: MailLabel): void - { - let deleted = false; - - // Update the mail object - if ( this.mail.labels.includes(label.id) ) - { - // Set the deleted - deleted = true; - - // Delete the label - this.mail.labels.splice(this.mail.labels.indexOf(label.id), 1); - } - else - { - // Add the label - this.mail.labels.push(label.id); - } - - // Update the mail on the server - this._mailboxService.updateMail(this.mail.id, {labels: this.mail.labels}).subscribe(); - - // If the label was deleted... - if ( deleted ) - { - // If the current activated route has a label parameter and it equals to the one we are removing... - if ( this._activatedRoute.snapshot.paramMap.get('label') && this._activatedRoute.snapshot.paramMap.get('label') === label.slug ) - { - // Navigate to the parent - this._router.navigate(['./'], {relativeTo: this._activatedRoute.parent}); - } - } - } - - /** - * Toggle important - */ - toggleImportant(): void - { - // Update the mail object - this.mail.important = !this.mail.important; - - // Update the mail on the server - this._mailboxService.updateMail(this.mail.id, {important: this.mail.important}).subscribe(); - - // If the important was removed... - if ( !this.mail.important ) - { - // If the current activated route has a filter parameter and it equals to the 'important'... - if ( this._activatedRoute.snapshot.paramMap.get('filter') && this._activatedRoute.snapshot.paramMap.get('filter') === 'important' ) - { - // Navigate to the parent - this._router.navigate(['./'], {relativeTo: this._activatedRoute.parent}); - } - } - } - - /** - * Toggle star - */ - toggleStar(): void - { - // Update the mail object - this.mail.starred = !this.mail.starred; - - // Update the mail on the server - this._mailboxService.updateMail(this.mail.id, {starred: this.mail.starred}).subscribe(); - - // If the star was removed... - if ( !this.mail.starred ) - { - // If the current activated route has a filter parameter and it equals to the 'starred'... - if ( this._activatedRoute.snapshot.paramMap.get('filter') && this._activatedRoute.snapshot.paramMap.get('filter') === 'starred' ) - { - // Navigate to the parent - this._router.navigate(['./'], {relativeTo: this._activatedRoute.parent}); - } - } - } - - /** - * Toggle unread - * - * @param unread - */ - toggleUnread(unread: boolean): void - { - // Update the mail object - this.mail.unread = unread; - - // Update the mail on the server - this._mailboxService.updateMail(this.mail.id, {unread: this.mail.unread}).subscribe(); - } - - /** - * Reply - */ - reply(): void - { - // Activate the reply form - this.replyFormActive = true; - - // Scroll to the bottom of the details pane - setTimeout(() => { - this._elementRef.nativeElement.scrollTop = this._elementRef.nativeElement.scrollHeight; - }); - } - - /** - * Reply all - */ - replyAll(): void - { - // Activate the reply form - this.replyFormActive = true; - - // Scroll to the bottom of the details pane - setTimeout(() => { - this._elementRef.nativeElement.scrollTop = this._elementRef.nativeElement.scrollHeight; - }); - } - - /** - * Forward - */ - forward(): void - { - // Activate the reply form - this.replyFormActive = true; - - // Scroll to the bottom of the details pane - setTimeout(() => { - this._elementRef.nativeElement.scrollTop = this._elementRef.nativeElement.scrollHeight; - }); - } - - /** - * Discard - */ - discard(): void - { - // Deactivate the reply form - this.replyFormActive = false; - } - - /** - * Send - */ - send(): void - { - // Deactivate the reply form - this.replyFormActive = false; - } - - /** - * Open info details panel - */ - openInfoDetailsPanel(): void - { - // Create the overlay - this._overlayRef = this._overlay.create({ - backdropClass : '', - hasBackdrop : true, - scrollStrategy : this._overlay.scrollStrategies.block(), - positionStrategy: this._overlay.position() - .flexibleConnectedTo(this._infoDetailsPanelOrigin._elementRef.nativeElement) - .withFlexibleDimensions() - .withViewportMargin(16) - .withLockedPosition() - .withPositions([ - { - originX : 'start', - originY : 'bottom', - overlayX: 'start', - overlayY: 'top' - }, - { - originX : 'start', - originY : 'top', - overlayX: 'start', - overlayY: 'bottom' - }, - { - originX : 'end', - originY : 'bottom', - overlayX: 'end', - overlayY: 'top' - }, - { - originX : 'end', - originY : 'top', - overlayX: 'end', - overlayY: 'bottom' - } - ]) - }); - - // Create a portal from the template - const templatePortal = new TemplatePortal(this._infoDetailsPanel, this._viewContainerRef); - - // Attach the portal to the overlay - this._overlayRef.attach(templatePortal); - - // Subscribe to the backdrop click - this._overlayRef.backdropClick().subscribe(() => { - - // If overlay exists and attached... - if ( this._overlayRef && this._overlayRef.hasAttached() ) - { - // Detach it - this._overlayRef.detach(); - } - - // If template portal exists and attached... - if ( templatePortal && templatePortal.isAttached ) - { - // Detach it - templatePortal.detach(); - } - }); - } - - /** - * Track by function for ngFor loops - * - * @param index - * @param item - */ - trackByFn(index: number, item: any): any - { - return item.id || index; - } -} diff --git a/src/app/modules/admin/apps/mailbox/list/list.component.html b/src/app/modules/admin/apps/mailbox/list/list.component.html deleted file mode 100644 index de579c6b..00000000 --- a/src/app/modules/admin/apps/mailbox/list/list.component.html +++ /dev/null @@ -1,154 +0,0 @@ -
- - - -
- - -
- -
- - - -
{{category.name}}
-
- - -
- -
- {{pagination.startIndex + 1}} - - - {{pagination.endIndex + 1}} - of - {{pagination.totalResults}} -
- - - - - - - - -
- - - -
- - - - -
- -
- - - -
- -
There are no e-mails
-
-
- - - -
- -
-
- -
diff --git a/src/app/modules/admin/apps/mailbox/list/list.component.ts b/src/app/modules/admin/apps/mailbox/list/list.component.ts deleted file mode 100644 index 00b89ed2..00000000 --- a/src/app/modules/admin/apps/mailbox/list/list.component.ts +++ /dev/null @@ -1,203 +0,0 @@ -import { Component, ElementRef, OnDestroy, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import * as moment from 'moment'; -import { MailboxService } from 'app/modules/admin/apps/mailbox/mailbox.service'; -import { MailboxComponent } from 'app/modules/admin/apps/mailbox/mailbox.component'; -import { Mail, MailCategory } from 'app/modules/admin/apps/mailbox/mailbox.types'; - -@Component({ - selector : 'mailbox-list', - templateUrl : './list.component.html', - encapsulation: ViewEncapsulation.None -}) -export class MailboxListComponent implements OnInit, OnDestroy -{ - @ViewChild('mailList') mailList: ElementRef; - - category: MailCategory; - mails: Mail[]; - mailsLoading: boolean = false; - pagination: any; - selectedMail: Mail; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor( - public mailboxComponent: MailboxComponent, - private _mailboxService: MailboxService - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Category - this._mailboxService.category$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((category: MailCategory) => { - this.category = category; - }); - - // Mails - this._mailboxService.mails$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((mails: Mail[]) => { - this.mails = mails; - }); - - // Mails loading - this._mailboxService.mailsLoading$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((mailsLoading: boolean) => { - this.mailsLoading = mailsLoading; - - // If the mail list element is available & the mails are loaded... - if ( this.mailList && !mailsLoading ) - { - // Reset the mail list element scroll position to top - this.mailList.nativeElement.scrollTo(0, 0); - } - }); - - // Pagination - this._mailboxService.pagination$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((pagination) => { - this.pagination = pagination; - }); - - // Selected mail - this._mailboxService.mail$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((mail: Mail) => { - this.selectedMail = mail; - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * On mail selected - * - * @param mail - */ - onMailSelected(mail: Mail): void - { - // If the mail is unread... - if ( mail.unread ) - { - // Update the mail object - mail.unread = false; - - // Update the mail on the server - this._mailboxService.updateMail(mail.id, {unread: false}).subscribe(); - } - - // Execute the mailSelected observable - this._mailboxService.selectedMailChanged.next(mail); - } - - /** - * Generate and return mail list group label if necessary or return false - * - * @param index - */ - mailListGroupLabel(index: number): string | false - { - const previousMail = this.mails[index - 1]; - const currentMail = this.mails[index]; - - // Generate and return label, if there is no previous mail - if ( !previousMail ) - { - return this._generateMailListGroupLabel(this.mails[index].date); - } - - // Return false, if the two dates are equal by day - if ( moment(previousMail.date, moment.ISO_8601).isSame(moment(currentMail.date, moment.ISO_8601), 'day') ) - { - return false; - } - - // Generate and return label - return this._generateMailListGroupLabel(this.mails[index].date); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Private methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Generate a mail list group label based on the date - * - * @param mailDate - * @private - */ - private _generateMailListGroupLabel(mailDate: string): string - { - const date = moment(mailDate, moment.ISO_8601); - const today = moment(); - const yesterday = moment().subtract(1, 'day'); - - // Check if the mail date is today - if ( date.isSame(today, 'day') ) - { - // Return 'Today' - return 'Today'; - } - - // Check if the mail date is yesterday - if ( date.isSame(yesterday, 'day') ) - { - // Return 'Yesterday' - return 'Yesterday'; - } - - // Check if we are in the same year with the mail date... - if ( date.isSame(today, 'year') ) - { - // Return a date without a year - return date.format('MMMM DD'); - } - - // Return a date - return date.format('LL'); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Track by function for ngFor loops - * - * @param index - * @param item - */ - trackByFn(index: number, item: any): any - { - return item.id || index; - } -} diff --git a/src/app/modules/admin/apps/mailbox/mailbox.component.html b/src/app/modules/admin/apps/mailbox/mailbox.component.html deleted file mode 100644 index 40c2fd1e..00000000 --- a/src/app/modules/admin/apps/mailbox/mailbox.component.html +++ /dev/null @@ -1,29 +0,0 @@ -
- - - - - - - - - - - - - - - -
- -
- -
- -
- -
diff --git a/src/app/modules/admin/apps/mailbox/mailbox.component.ts b/src/app/modules/admin/apps/mailbox/mailbox.component.ts deleted file mode 100644 index b5136710..00000000 --- a/src/app/modules/admin/apps/mailbox/mailbox.component.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { Component, OnDestroy, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; -import { MatDrawer } from '@angular/material/sidenav'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import { FuseMediaWatcherService } from '@fuse/services/media-watcher'; - -@Component({ - selector : 'mailbox', - templateUrl : './mailbox.component.html', - encapsulation: ViewEncapsulation.None -}) -export class MailboxComponent implements OnInit, OnDestroy -{ - @ViewChild('drawer') drawer: MatDrawer; - - drawerMode: 'over' | 'side' = 'side'; - drawerOpened: boolean = true; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor(private _fuseMediaWatcherService: FuseMediaWatcherService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Subscribe to media changes - this._fuseMediaWatcherService.onMediaChange$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe(({matchingAliases}) => { - - // Set the drawerMode and drawerOpened if the given breakpoint is active - if ( matchingAliases.includes('md') ) - { - this.drawerMode = 'side'; - this.drawerOpened = true; - } - else - { - this.drawerMode = 'over'; - this.drawerOpened = false; - } - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } -} diff --git a/src/app/modules/admin/apps/mailbox/mailbox.constants.ts b/src/app/modules/admin/apps/mailbox/mailbox.constants.ts deleted file mode 100644 index edb3c749..00000000 --- a/src/app/modules/admin/apps/mailbox/mailbox.constants.ts +++ /dev/null @@ -1,65 +0,0 @@ -export const labelColors = [ - 'gray', - 'red', - 'orange', - 'yellow', - 'green', - 'teal', - 'blue', - 'indigo', - 'purple', - 'pink' -]; - -export const labelColorDefs = { - gray : { - text : 'text-gray-500', - bg : 'bg-gray-500', - combined: 'text-gray-800 bg-gray-100' - }, - red : { - text : 'text-red-500', - bg : 'bg-red-500', - combined: 'text-red-800 bg-red-100' - }, - orange: { - text : 'text-orange-500', - bg : 'bg-orange-500', - combined: 'text-orange-800 bg-orange-100' - }, - yellow: { - text : 'text-yellow-500', - bg : 'bg-yellow-500', - combined: 'text-yellow-800 bg-yellow-100' - }, - green : { - text : 'text-green-500', - bg : 'bg-green-500', - combined: 'text-green-800 bg-green-100' - }, - teal : { - text : 'text-teal-500', - bg : 'bg-teal-500', - combined: 'text-teal-800 bg-teal-100' - }, - blue : { - text : 'text-blue-500', - bg : 'bg-blue-500', - combined: 'text-blue-800 bg-blue-100' - }, - indigo: { - text : 'text-indigo-500', - bg : 'bg-indigo-500', - combined: 'text-indigo-800 bg-indigo-100' - }, - purple: { - text : 'text-purple-500', - bg : 'bg-purple-500', - combined: 'text-purple-800 bg-purple-100' - }, - pink : { - text : 'text-pink-500', - bg : 'bg-pink-500', - combined: 'text-pink-800 bg-pink-100' - } -}; diff --git a/src/app/modules/admin/apps/mailbox/mailbox.module.ts b/src/app/modules/admin/apps/mailbox/mailbox.module.ts deleted file mode 100644 index ae5e20a1..00000000 --- a/src/app/modules/admin/apps/mailbox/mailbox.module.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { MatButtonModule } from '@angular/material/button'; -import { MatCheckboxModule } from '@angular/material/checkbox'; -import { MatDialogModule } from '@angular/material/dialog'; -import { MatDividerModule } from '@angular/material/divider'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatIconModule } from '@angular/material/icon'; -import { MatInputModule } from '@angular/material/input'; -import { MatMenuModule } from '@angular/material/menu'; -import { MatProgressBarModule } from '@angular/material/progress-bar'; -import { MatSelectModule } from '@angular/material/select'; -import { MatSidenavModule } from '@angular/material/sidenav'; -import { QuillModule } from 'ngx-quill'; -import { FuseFindByKeyPipeModule } from '@fuse/pipes/find-by-key'; -import { FuseNavigationModule } from '@fuse/components/navigation'; -import { FuseScrollbarModule } from '@fuse/directives/scrollbar'; -import { FuseScrollResetModule } from '@fuse/directives/scroll-reset'; -import { SharedModule } from 'app/shared/shared.module'; -import { MailboxComponent } from 'app/modules/admin/apps/mailbox/mailbox.component'; -import { MailboxComposeComponent } from 'app/modules/admin/apps/mailbox/compose/compose.component'; -import { MailboxDetailsComponent } from 'app/modules/admin/apps/mailbox/details/details.component'; -import { MailboxListComponent } from 'app/modules/admin/apps/mailbox/list/list.component'; -import { MailboxSettingsComponent } from 'app/modules/admin/apps/mailbox/settings/settings.component'; -import { MailboxSidebarComponent } from 'app/modules/admin/apps/mailbox/sidebar/sidebar.component'; -import { mailboxRoutes } from 'app/modules/admin/apps/mailbox/mailbox.routing'; - -@NgModule({ - declarations: [ - MailboxComponent, - MailboxComposeComponent, - MailboxDetailsComponent, - MailboxListComponent, - MailboxSettingsComponent, - MailboxSidebarComponent - ], - imports : [ - RouterModule.forChild(mailboxRoutes), - MatButtonModule, - MatCheckboxModule, - MatDialogModule, - MatDividerModule, - MatFormFieldModule, - MatIconModule, - MatInputModule, - MatMenuModule, - MatProgressBarModule, - MatSelectModule, - MatSidenavModule, - QuillModule.forRoot(), - FuseFindByKeyPipeModule, - FuseNavigationModule, - FuseScrollbarModule, - FuseScrollResetModule, - SharedModule - ] -}) -export class MailboxModule -{ -} diff --git a/src/app/modules/admin/apps/mailbox/mailbox.resolvers.ts b/src/app/modules/admin/apps/mailbox/mailbox.resolvers.ts deleted file mode 100644 index b91dd0e3..00000000 --- a/src/app/modules/admin/apps/mailbox/mailbox.resolvers.ts +++ /dev/null @@ -1,246 +0,0 @@ -import { Injectable } from '@angular/core'; -import { ActivatedRouteSnapshot, Resolve, Router, RouterStateSnapshot } from '@angular/router'; -import { forkJoin, Observable, throwError } from 'rxjs'; -import { catchError, finalize } from 'rxjs/operators'; -import { MailboxService } from 'app/modules/admin/apps/mailbox/mailbox.service'; -import { Mail, MailFilter, MailFolder, MailLabel } from 'app/modules/admin/apps/mailbox/mailbox.types'; - -@Injectable({ - providedIn: 'root' -}) -export class MailboxFoldersResolver implements Resolve -{ - /** - * Constructor - */ - constructor(private _mailboxService: MailboxService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Resolver - * - * @param route - * @param state - */ - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable - { - return this._mailboxService.getFolders(); - } -} - -@Injectable({ - providedIn: 'root' -}) -export class MailboxFiltersResolver implements Resolve -{ - /** - * Constructor - */ - constructor(private _mailboxService: MailboxService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Resolver - * - * @param route - * @param state - */ - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable - { - return this._mailboxService.getFilters(); - } -} - -@Injectable({ - providedIn: 'root' -}) -export class MailboxLabelsResolver implements Resolve -{ - /** - * Constructor - */ - constructor(private _mailboxService: MailboxService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Resolver - * - * @param route - * @param state - */ - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable - { - return this._mailboxService.getLabels(); - } -} - -@Injectable({ - providedIn: 'root' -}) -export class MailboxMailsResolver implements Resolve -{ - /** - * Constructor - */ - constructor( - private _mailboxService: MailboxService, - private _router: Router - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Resolver - * - * @param route - * @param state - */ - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable | any - { - // Don't allow page param to go below 1 - if ( route.paramMap.get('page') && parseInt(route.paramMap.get('page'), 10) <= 0 ) - { - // Get the parent url - const url = state.url.split('/').slice(0, -1).join('/') + '/1'; - - // Navigate to there - this._router.navigateByUrl(url); - - // Don't allow request to go through - return false; - } - - // Create and build the sources array - const sources = []; - - // If folder is set on the parameters... - if ( route.paramMap.get('folder') ) - { - sources.push(this._mailboxService.getMailsByFolder(route.paramMap.get('folder'), route.paramMap.get('page'))); - } - - // If filter is set on the parameters... - if ( route.paramMap.get('filter') ) - { - sources.push(this._mailboxService.getMailsByFilter(route.paramMap.get('filter'), route.paramMap.get('page'))); - } - - // If label is set on the parameters... - if ( route.paramMap.get('label') ) - { - sources.push(this._mailboxService.getMailsByLabel(route.paramMap.get('label'), route.paramMap.get('page'))); - } - - // Fork join all the sources - return forkJoin(sources) - .pipe( - finalize(() => { - - // Reset the mail every time mails list changes, - // if there is no selected mail. This will ensure - // that the mail will be reset while navigating - // between the folders/filters/labels but it won't - // reset on page reload if we are reading a mail. - - // Try to get the current activated route - let currentRoute = route; - while ( currentRoute.firstChild ) - { - currentRoute = currentRoute.firstChild; - } - - // Make sure there is no 'id' parameter on the current route - if ( !currentRoute.paramMap.get('id') ) - { - // Reset the mail - this._mailboxService.resetMail().subscribe(); - } - }), - - // Error here means the requested page is not available - catchError((error) => { - - // Log the error - console.error(error.message); - - // Get the parent url and append the last possible page number to the parent url - const url = state.url.split('/').slice(0, -1).join('/') + '/' + error.pagination.lastPage; - - // Navigate to there - this._router.navigateByUrl(url); - - // Throw an error - return throwError(error); - }) - ); - } -} - -@Injectable({ - providedIn: 'root' -}) -export class MailboxMailResolver implements Resolve -{ - /** - * Constructor - */ - constructor( - private _mailboxService: MailboxService, - private _router: Router - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Resolver - * - * @param route - * @param state - */ - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable - { - return this._mailboxService.getMailById(route.paramMap.get('id')) - .pipe( - // Error here means the requested mail is either - // not available on the requested page or not - // available at all - catchError((error) => { - - // Log the error - console.error(error); - - // Get the parent url - const parentUrl = state.url.split('/').slice(0, -1).join('/'); - - // Navigate to there - this._router.navigateByUrl(parentUrl); - - // Throw an error - return throwError(error); - }) - ); - } -} diff --git a/src/app/modules/admin/apps/mailbox/mailbox.routing.ts b/src/app/modules/admin/apps/mailbox/mailbox.routing.ts deleted file mode 100644 index d836c7a0..00000000 --- a/src/app/modules/admin/apps/mailbox/mailbox.routing.ts +++ /dev/null @@ -1,162 +0,0 @@ -import { ActivatedRouteSnapshot, Route, UrlMatchResult, UrlSegment } from '@angular/router'; -import { isEqual } from 'lodash-es'; -import { MailboxComponent } from 'app/modules/admin/apps/mailbox/mailbox.component'; -import { MailboxFiltersResolver, MailboxFoldersResolver, MailboxLabelsResolver, MailboxMailResolver, MailboxMailsResolver } from 'app/modules/admin/apps/mailbox/mailbox.resolvers'; -import { MailboxListComponent } from 'app/modules/admin/apps/mailbox/list/list.component'; -import { MailboxDetailsComponent } from 'app/modules/admin/apps/mailbox/details/details.component'; -import { MailboxSettingsComponent } from 'app/modules/admin/apps/mailbox/settings/settings.component'; - -/** - * Mailbox custom route matcher - * - * @param url - */ -export function mailboxRouteMatcher(url: UrlSegment[]): UrlMatchResult -{ - // Prepare consumed url and positional parameters - let consumed = url; - const posParams = {}; - - // Settings - if ( url[0].path === 'settings' ) - { - // Do not match - return null; - } - // Filter or label - else if ( url[0].path === 'filter' || url[0].path === 'label' ) - { - posParams[url[0].path] = url[1]; - posParams['page'] = url[2]; - - // Remove the id if exists - if ( url[3] ) - { - consumed = url.slice(0, -1); - } - } - // Folder - else - { - posParams['folder'] = url[0]; - posParams['page'] = url[1]; - - // Remove the id if exists - if ( url[2] ) - { - consumed = url.slice(0, -1); - } - } - - return { - consumed, - posParams - }; -} - -export function mailboxRunGuardsAndResolvers(from: ActivatedRouteSnapshot, to: ActivatedRouteSnapshot): boolean -{ - // If we are navigating from mail to mails, meaning there is an id in - // from's deepest first child and there isn't one in the to's, we will - // trigger the resolver - - // Get the current activated route of the 'from' - let fromCurrentRoute = from; - while ( fromCurrentRoute.firstChild ) - { - fromCurrentRoute = fromCurrentRoute.firstChild; - } - - // Get the current activated route of the 'to' - let toCurrentRoute = to; - while ( toCurrentRoute.firstChild ) - { - toCurrentRoute = toCurrentRoute.firstChild; - } - - // Trigger the resolver if the condition met - if ( fromCurrentRoute.paramMap.get('id') && !toCurrentRoute.paramMap.get('id') ) - { - return true; - } - - // If the from and to params are equal, don't trigger the resolver - const fromParams = {}; - const toParams = {}; - - from.paramMap.keys.forEach((key) => { - fromParams[key] = from.paramMap.get(key); - }); - - to.paramMap.keys.forEach((key) => { - toParams[key] = to.paramMap.get(key); - }); - - if ( isEqual(fromParams, toParams) ) - { - return false; - } - - // Trigger the resolver on other cases - return true; -} - -export const mailboxRoutes: Route[] = [ - { - path : '', - redirectTo: 'inbox/1', - pathMatch : 'full' - }, - { - path : 'filter/:filter', - redirectTo: 'filter/:filter/1', - pathMatch : 'full' - }, - { - path : 'label/:label', - redirectTo: 'label/:label/1', - pathMatch : 'full' - }, - { - path : ':folder', - redirectTo: ':folder/1', - pathMatch : 'full' - }, - { - path : '', - component: MailboxComponent, - resolve : { - filters: MailboxFiltersResolver, - folders: MailboxFoldersResolver, - labels : MailboxLabelsResolver - }, - children : [ - { - component : MailboxListComponent, - matcher : mailboxRouteMatcher, - runGuardsAndResolvers: mailboxRunGuardsAndResolvers, - resolve : { - mails: MailboxMailsResolver - }, - children : [ - { - path : '', - component: MailboxDetailsComponent, - children : [ - { - path : ':id', - resolve: { - mail: MailboxMailResolver - } - } - ] - } - ] - }, - { - path : 'settings', - component: MailboxSettingsComponent - } - ] - } -]; diff --git a/src/app/modules/admin/apps/mailbox/mailbox.service.ts b/src/app/modules/admin/apps/mailbox/mailbox.service.ts deleted file mode 100644 index 7fddeae9..00000000 --- a/src/app/modules/admin/apps/mailbox/mailbox.service.ts +++ /dev/null @@ -1,396 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient } from '@angular/common/http'; -import { BehaviorSubject, Observable, of, throwError } from 'rxjs'; -import { map, switchMap, take, tap } from 'rxjs/operators'; -import { Mail, MailCategory, MailFilter, MailFolder, MailLabel } from 'app/modules/admin/apps/mailbox/mailbox.types'; - -@Injectable({ - providedIn: 'root' -}) -export class MailboxService -{ - selectedMailChanged: BehaviorSubject = new BehaviorSubject(null); - private _category: BehaviorSubject = new BehaviorSubject(null); - private _filters: BehaviorSubject = new BehaviorSubject(null); - private _folders: BehaviorSubject = new BehaviorSubject(null); - private _labels: BehaviorSubject = new BehaviorSubject(null); - private _mails: BehaviorSubject = new BehaviorSubject(null); - private _mailsLoading: BehaviorSubject = new BehaviorSubject(false); - private _mail: BehaviorSubject = new BehaviorSubject(null); - private _pagination: BehaviorSubject = new BehaviorSubject(null); - - /** - * Constructor - */ - constructor(private _httpClient: HttpClient) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Accessors - // ----------------------------------------------------------------------------------------------------- - - /** - * Getter for category - */ - get category$(): Observable - { - return this._category.asObservable(); - } - - /** - * Getter for filters - */ - get filters$(): Observable - { - return this._filters.asObservable(); - } - - /** - * Getter for folders - */ - get folders$(): Observable - { - return this._folders.asObservable(); - } - - /** - * Getter for labels - */ - get labels$(): Observable - { - return this._labels.asObservable(); - } - - /** - * Getter for mails - */ - get mails$(): Observable - { - return this._mails.asObservable(); - } - - /** - * Getter for mails loading - */ - get mailsLoading$(): Observable - { - return this._mailsLoading.asObservable(); - } - - /** - * Getter for mail - */ - get mail$(): Observable - { - return this._mail.asObservable(); - } - - /** - * Getter for pagination - */ - get pagination$(): Observable - { - return this._pagination.asObservable(); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Get filters - */ - getFilters(): Observable - { - return this._httpClient.get('api/apps/mailbox/filters').pipe( - tap((response: any) => { - this._filters.next(response); - }) - ); - } - - /** - * Get folders - */ - getFolders(): Observable - { - return this._httpClient.get('api/apps/mailbox/folders').pipe( - tap((response: any) => { - this._folders.next(response); - }) - ); - } - - /** - * Get labels - */ - getLabels(): Observable - { - return this._httpClient.get('api/apps/mailbox/labels').pipe( - tap((response: any) => { - this._labels.next(response); - }) - ); - } - - /** - * Get mails by filter - */ - getMailsByFilter(filter: string, page: string = '1'): Observable - { - // Execute the mails loading with true - this._mailsLoading.next(true); - - return this._httpClient.get('api/apps/mailbox/mails', { - params: { - filter, - page - } - }).pipe( - tap((response: any) => { - this._category.next({ - type: 'filter', - name: filter - }); - this._mails.next(response.mails); - this._pagination.next(response.pagination); - this._mailsLoading.next(false); - }), - switchMap((response) => { - - if ( response.mails === null ) - { - return throwError({ - message : 'Requested page is not available!', - pagination: response.pagination - }); - } - - return of(response); - }) - ); - } - - /** - * Get mails by folder - */ - getMailsByFolder(folder: string, page: string = '1'): Observable - { - // Execute the mails loading with true - this._mailsLoading.next(true); - - return this._httpClient.get('api/apps/mailbox/mails', { - params: { - folder, - page - } - }).pipe( - tap((response: any) => { - this._category.next({ - type: 'folder', - name: folder - }); - this._mails.next(response.mails); - this._pagination.next(response.pagination); - this._mailsLoading.next(false); - }), - switchMap((response) => { - - if ( response.mails === null ) - { - return throwError({ - message : 'Requested page is not available!', - pagination: response.pagination - }); - } - - return of(response); - }) - ); - } - - /** - * Get mails by label - */ - getMailsByLabel(label: string, page: string = '1'): Observable - { - // Execute the mails loading with true - this._mailsLoading.next(true); - - return this._httpClient.get('api/apps/mailbox/mails', { - params: { - label, - page - } - }).pipe( - tap((response: any) => { - this._category.next({ - type: 'label', - name: label - }); - this._mails.next(response.mails); - this._pagination.next(response.pagination); - this._mailsLoading.next(false); - }), - switchMap((response) => { - - if ( response.mails === null ) - { - return throwError({ - message : 'Requested page is not available!', - pagination: response.pagination - }); - } - - return of(response); - }) - ); - } - - /** - * Get mail by id - */ - getMailById(id: string): Observable - { - return this._mails.pipe( - take(1), - map((mails) => { - - // Find the mail - const mail = mails.find(item => item.id === id) || null; - - // Update the mail - this._mail.next(mail); - - // Return the mail - return mail; - }), - switchMap((mail) => { - - if ( !mail ) - { - return throwError('Could not found mail with id of ' + id + '!'); - } - - return of(mail); - }) - ); - } - - /** - * Update mail - * - * @param id - * @param mail - */ - updateMail(id: string, mail: Mail): Observable - { - return this._httpClient.patch('api/apps/mailbox/mail', { - id, - mail - }).pipe( - tap(() => { - - // Re-fetch the folders on mail update - // to get the updated counts on the sidebar - this.getFolders().subscribe(); - }) - ); - } - - /** - * Reset the current mail - */ - resetMail(): Observable - { - return of(true).pipe( - take(1), - tap(() => { - this._mail.next(null); - }) - ); - } - - /** - * Add label - * - * @param label - */ - addLabel(label: MailLabel): Observable - { - return this.labels$.pipe( - take(1), - switchMap(labels => this._httpClient.post('api/apps/mailbox/label', {label}).pipe( - map((newLabel) => { - - // Update the labels with the new label - this._labels.next([...labels, newLabel]); - - // Return the new label - return newLabel; - }) - )) - ); - } - - /** - * Update label - * - * @param id - * @param label - */ - updateLabel(id: string, label: MailLabel): Observable - { - return this.labels$.pipe( - take(1), - switchMap(labels => this._httpClient.patch('api/apps/mailbox/label', { - id, - label - }).pipe( - map((updatedLabel: any) => { - - // Find the index of the updated label within the labels - const index = labels.findIndex(item => item.id === id); - - // Update the label - labels[index] = updatedLabel; - - // Update the labels - this._labels.next(labels); - - // Return the updated label - return updatedLabel; - }) - )) - ); - } - - /** - * Delete label - * - * @param id - */ - deleteLabel(id: string): Observable - { - return this.labels$.pipe( - take(1), - switchMap(labels => this._httpClient.delete('api/apps/mailbox/label', {params: {id}}).pipe( - map((isDeleted: any) => { - - // Find the index of the deleted label within the labels - const index = labels.findIndex(item => item.id === id); - - // Delete the label - labels.splice(index, 1); - - // Update the labels - this._labels.next(labels); - - // Return the deleted status - return isDeleted; - }) - )) - ); - } -} diff --git a/src/app/modules/admin/apps/mailbox/mailbox.types.ts b/src/app/modules/admin/apps/mailbox/mailbox.types.ts deleted file mode 100644 index 323fd04f..00000000 --- a/src/app/modules/admin/apps/mailbox/mailbox.types.ts +++ /dev/null @@ -1,60 +0,0 @@ -export interface Mail -{ - id?: string; - type?: string; - from?: { - avatar?: string; - contact?: string; - }; - to?: string; - cc?: string[]; - ccCount?: number; - bcc?: string[]; - bccCount?: number; - date?: string; - subject?: string; - content?: string; - attachments?: { - type?: string; - name?: string; - size?: number; - preview?: string; - downloadUrl?: string; - }[]; - starred?: boolean; - important?: boolean; - unread?: boolean; - folder?: string; - labels?: string[]; -} - -export interface MailCategory -{ - type: 'folder' | 'filter' | 'label'; - name: string; -} - -export interface MailFolder -{ - id: string; - title: string; - slug: string; - icon: string; - count?: number; -} - -export interface MailFilter -{ - id: string; - title: string; - slug: string; - icon: string; -} - -export interface MailLabel -{ - id: string; - title: string; - slug: string; - color: string; -} diff --git a/src/app/modules/admin/apps/mailbox/settings/settings.component.html b/src/app/modules/admin/apps/mailbox/settings/settings.component.html deleted file mode 100644 index 30e3e3ec..00000000 --- a/src/app/modules/admin/apps/mailbox/settings/settings.component.html +++ /dev/null @@ -1,121 +0,0 @@ -
- -
- -
- -
- -
-
Manage Labels
-
Create, update and delete labels
-
-
- - -
- - -
- - New Label - - - - - -
Label color
-
- - - - -
-
- -
-
- - -
- - - - - - - - -
Label color
-
- - - - -
-
- -
-
-
- -
-
diff --git a/src/app/modules/admin/apps/mailbox/settings/settings.component.ts b/src/app/modules/admin/apps/mailbox/settings/settings.component.ts deleted file mode 100644 index fe967690..00000000 --- a/src/app/modules/admin/apps/mailbox/settings/settings.component.ts +++ /dev/null @@ -1,146 +0,0 @@ -import { Component, OnInit, ViewEncapsulation } from '@angular/core'; -import { FormArray, FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { debounceTime, take } from 'rxjs/operators'; -import { MailboxComponent } from 'app/modules/admin/apps/mailbox/mailbox.component'; -import { MailboxService } from 'app/modules/admin/apps/mailbox/mailbox.service'; -import { MailLabel } from 'app/modules/admin/apps/mailbox/mailbox.types'; -import { labelColorDefs, labelColors } from 'app/modules/admin/apps/mailbox/mailbox.constants'; - -@Component({ - selector : 'mailbox-settings', - templateUrl : './settings.component.html', - encapsulation: ViewEncapsulation.None -}) -export class MailboxSettingsComponent implements OnInit -{ - labelColors: any = labelColors; - labelColorDefs: any = labelColorDefs; - labels: MailLabel[]; - labelsForm: FormGroup; - - /** - * Constructor - */ - constructor( - public mailboxComponent: MailboxComponent, - private _formBuilder: FormBuilder, - private _mailboxService: MailboxService - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the labels form - this.labelsForm = this._formBuilder.group({ - labels : this._formBuilder.array([]), - newLabel: this._formBuilder.group({ - title: ['', Validators.required], - color: ['orange'] - }) - }); - - // Labels - this._mailboxService.labels$ - .pipe(take(1)) - .subscribe((labels: MailLabel[]) => { - - // Get the labels - this.labels = labels; - - // Iterate through the labels - labels.forEach((label) => { - - // Create a label form group - const labelFormGroup = this._formBuilder.group({ - id : [label.id], - title: [label.title, Validators.required], - slug : [label.slug], - color: [label.color] - }); - - // Add the label form group to the labels form array - (this.labelsForm.get('labels') as FormArray).push(labelFormGroup); - }); - }); - - // Update labels when there is a value change - this.labelsForm.get('labels').valueChanges - .pipe(debounceTime(500)) - .subscribe(() => { - this.updateLabels(); - }); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Add a label - */ - addLabel(): void - { - // Add label to the server - this._mailboxService.addLabel(this.labelsForm.get('newLabel').value).subscribe((addedLabel) => { - - // Push the new label to the labels form array - (this.labelsForm.get('labels') as FormArray).push(this._formBuilder.group({ - id : [addedLabel.id], - title: [addedLabel.title, Validators.required], - slug : [addedLabel.slug], - color: [addedLabel.color] - })); - - // Reset the new label form - this.labelsForm.get('newLabel').markAsPristine(); - this.labelsForm.get('newLabel').markAsUntouched(); - this.labelsForm.get('newLabel.title').reset(); - this.labelsForm.get('newLabel.title').clearValidators(); - this.labelsForm.get('newLabel.title').updateValueAndValidity(); - }); - } - - /** - * Delete a label - */ - deleteLabel(id: string): void - { - // Get the labels form array - const labelsFormArray = this.labelsForm.get('labels') as FormArray; - - // Remove the label from the labels form array - labelsFormArray.removeAt(labelsFormArray.value.findIndex((label) => label.id === id)); - - // Delete label on the server - this._mailboxService.deleteLabel(id).subscribe(); - } - - /** - * Update labels - */ - updateLabels(): void - { - // Iterate through the labels form array controls - (this.labelsForm.get('labels') as FormArray).controls.forEach((labelFormGroup) => { - - // If the label has been edited... - if ( labelFormGroup.dirty ) - { - // Update the label on the server - this._mailboxService.updateLabel(labelFormGroup.value.id, labelFormGroup.value).subscribe(); - } - }); - - // Reset the labels form array - this.labelsForm.get('labels').markAsPristine(); - this.labelsForm.get('labels').markAsUntouched(); - } -} diff --git a/src/app/modules/admin/apps/mailbox/sidebar/sidebar.component.html b/src/app/modules/admin/apps/mailbox/sidebar/sidebar.component.html deleted file mode 100644 index 93eb5b02..00000000 --- a/src/app/modules/admin/apps/mailbox/sidebar/sidebar.component.html +++ /dev/null @@ -1,21 +0,0 @@ -
- -
Mailbox
- - - - - - -
diff --git a/src/app/modules/admin/apps/mailbox/sidebar/sidebar.component.scss b/src/app/modules/admin/apps/mailbox/sidebar/sidebar.component.scss deleted file mode 100644 index 2cb182d1..00000000 --- a/src/app/modules/admin/apps/mailbox/sidebar/sidebar.component.scss +++ /dev/null @@ -1,9 +0,0 @@ -mailbox-sidebar { - - fuse-vertical-navigation { - - .fuse-vertical-navigation-wrapper { - box-shadow: none !important; - } - } -} diff --git a/src/app/modules/admin/apps/mailbox/sidebar/sidebar.component.ts b/src/app/modules/admin/apps/mailbox/sidebar/sidebar.component.ts deleted file mode 100644 index c7fff6b5..00000000 --- a/src/app/modules/admin/apps/mailbox/sidebar/sidebar.component.ts +++ /dev/null @@ -1,297 +0,0 @@ -import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { MatDialog } from '@angular/material/dialog'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import { FuseNavigationItem, FuseNavigationService } from '@fuse/components/navigation'; -import { MailboxService } from 'app/modules/admin/apps/mailbox/mailbox.service'; -import { MailboxComposeComponent } from 'app/modules/admin/apps/mailbox/compose/compose.component'; -import { labelColorDefs } from 'app/modules/admin/apps/mailbox/mailbox.constants'; -import { MailFilter, MailFolder, MailLabel } from 'app/modules/admin/apps/mailbox/mailbox.types'; - -@Component({ - selector : 'mailbox-sidebar', - templateUrl : './sidebar.component.html', - styleUrls : ['./sidebar.component.scss'], - encapsulation: ViewEncapsulation.None -}) -export class MailboxSidebarComponent implements OnInit, OnDestroy -{ - filters: MailFilter[]; - folders: MailFolder[]; - labels: MailLabel[]; - menuData: FuseNavigationItem[] = []; - private _filtersMenuData: FuseNavigationItem[] = []; - private _foldersMenuData: FuseNavigationItem[] = []; - private _labelsMenuData: FuseNavigationItem[] = []; - private _otherMenuData: FuseNavigationItem[] = []; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor( - private _mailboxService: MailboxService, - private _matDialog: MatDialog, - private _fuseNavigationService: FuseNavigationService - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Filters - this._mailboxService.filters$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((filters: MailFilter[]) => { - this.filters = filters; - - // Generate menu links - this._generateFiltersMenuLinks(); - }); - - // Folders - this._mailboxService.folders$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((folders: MailFolder[]) => { - this.folders = folders; - - // Generate menu links - this._generateFoldersMenuLinks(); - - // Update navigation badge - this._updateNavigationBadge(folders); - }); - - // Labels - this._mailboxService.labels$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((labels: MailLabel[]) => { - this.labels = labels; - - // Generate menu links - this._generateLabelsMenuLinks(); - }); - - // Generate other menu links - this._generateOtherMenuLinks(); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Open compose dialog - */ - openComposeDialog(): void - { - // Open the dialog - const dialogRef = this._matDialog.open(MailboxComposeComponent); - - dialogRef.afterClosed() - .subscribe(result => { - console.log('Compose dialog was closed!'); - }); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Private methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Generate menus for folders - * - * @private - */ - private _generateFoldersMenuLinks(): void - { - // Reset the folders menu mock-api - this._foldersMenuData = []; - - // Iterate through the folders - this.folders.forEach((folder) => { - - // Generate menu item for the folder - const menuItem: FuseNavigationItem = { - id : folder.id, - title: folder.title, - type : 'basic', - icon : folder.icon, - link : '/apps/mailbox/' + folder.slug - }; - - // If the count is available and is bigger than zero... - if ( folder.count && folder.count > 0 ) - { - // Add the count as a badge - menuItem['badge'] = { - title: folder.count + '' - }; - } - - // Push the menu item to the folders menu mock-api - this._foldersMenuData.push(menuItem); - }); - - // Update the menu mock-api - this._updateMenuData(); - } - - /** - * Generate menus for filters - * - * @private - */ - private _generateFiltersMenuLinks(): void - { - // Reset the filters menu - this._filtersMenuData = []; - - // Iterate through the filters - this.filters.forEach((filter) => { - - // Generate menu item for the filter - this._filtersMenuData.push({ - id : filter.id, - title: filter.title, - type : 'basic', - icon : filter.icon, - link : '/apps/mailbox/filter/' + filter.slug - }); - }); - - // Update the menu mock-api - this._updateMenuData(); - } - - /** - * Generate menus for labels - * - * @private - */ - private _generateLabelsMenuLinks(): void - { - // Reset the labels menu - this._labelsMenuData = []; - - // Iterate through the labels - this.labels.forEach((label) => { - - // Generate menu item for the label - this._labelsMenuData.push({ - id : label.id, - title : label.title, - type : 'basic', - icon : 'heroicons_outline:tag', - classes: { - icon: labelColorDefs[label.color].text - }, - link : '/apps/mailbox/label/' + label.slug - }); - }); - - // Update the menu mock-api - this._updateMenuData(); - } - - /** - * Generate other menus - * - * @private - */ - private _generateOtherMenuLinks(): void - { - // Settings menu - this._otherMenuData.push({ - title: 'Settings', - type : 'basic', - icon : 'heroicons_outline:cog', - link : '/apps/mailbox/settings' - }); - - // Update the menu mock-api - this._updateMenuData(); - } - - /** - * Update the menu mock-api - * - * @private - */ - private _updateMenuData(): void - { - this.menuData = [ - { - title : 'MAILBOXES', - type : 'group', - children: [ - ...this._foldersMenuData - ] - }, - { - title : 'FILTERS', - type : 'group', - children: [ - ...this._filtersMenuData - ] - }, - { - title : 'LABELS', - type : 'group', - children: [ - ...this._labelsMenuData - ] - }, - { - type: 'spacer' - }, - ...this._otherMenuData - ]; - } - - /** - * Update the navigation badge using the - * unread count of the inbox folder - * - * @param folders - * @private - */ - private _updateNavigationBadge(folders: MailFolder[]): void - { - // Get the inbox folder - const inboxFolder = this.folders.find((folder) => folder.slug === 'inbox'); - - // Get the component -> navigation mock-api -> item - const mainNavigationComponent = this._fuseNavigationService.getComponent('mainNavigation'); - - // If the main navigation component exists... - if ( mainNavigationComponent ) - { - const mainNavigation = mainNavigationComponent.navigation; - const menuItem = this._fuseNavigationService.getItem('apps.mailbox', mainNavigation); - - // Update the badge title of the item - menuItem.badge.title = inboxFolder.count + ''; - - // Refresh the navigation - mainNavigationComponent.refresh(); - } - } -} diff --git a/src/app/modules/admin/apps/tasks/details/details.component.html b/src/app/modules/admin/apps/tasks/details/details.component.html deleted file mode 100644 index 20c8cbc0..00000000 --- a/src/app/modules/admin/apps/tasks/details/details.component.html +++ /dev/null @@ -1,335 +0,0 @@ -
- -
- - -
- - - - -
- - - - - - - - -
- -
- - - - -
- - {{task.type === 'task' ? 'Task title' : 'Section title'}} - - -
- - -
-
Tags
-
- - - -
- {{tag.title}} -
-
-
-
- - - - Edit - - - - - Add - - - - -
- -
-
- -
- -
-
- -
-
- - -
- - -
{{tag.title}}
-
-
- - -
-
- - - - -
-
-
- -
- -
Create "{{newTagInput.value}}"
-
-
-
-
-
-
-
- - -
- - -
-
Priority
-
- - - - - Low - - - - - - Normal - - - - - - High - -
- - - - - - - - - - -
- - -
-
Due date
-
- - - {{task.dueDate | date:'longDate'}} - Not set - - -
-
- -
- - -
- - Notes - - -
- -
- -
diff --git a/src/app/modules/admin/apps/tasks/details/details.component.ts b/src/app/modules/admin/apps/tasks/details/details.component.ts deleted file mode 100644 index c4756fc0..00000000 --- a/src/app/modules/admin/apps/tasks/details/details.component.ts +++ /dev/null @@ -1,526 +0,0 @@ -import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, OnDestroy, OnInit, Renderer2, TemplateRef, ViewChild, ViewContainerRef, ViewEncapsulation } from '@angular/core'; -import { ActivatedRoute, NavigationEnd, Router } from '@angular/router'; -import { FormBuilder, FormGroup } from '@angular/forms'; -import { TemplatePortal } from '@angular/cdk/portal'; -import { Overlay, OverlayRef } from '@angular/cdk/overlay'; -import { MatDrawerToggleResult } from '@angular/material/sidenav'; -import { Subject } from 'rxjs'; -import { debounceTime, filter, takeUntil, tap } from 'rxjs/operators'; -import { assign } from 'lodash-es'; -import * as moment from 'moment'; -import { Tag, Task } from 'app/modules/admin/apps/tasks/tasks.types'; -import { TasksListComponent } from 'app/modules/admin/apps/tasks/list/list.component'; -import { TasksService } from 'app/modules/admin/apps/tasks/tasks.service'; - -@Component({ - selector : 'tasks-details', - templateUrl : './details.component.html', - encapsulation : ViewEncapsulation.None, - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class TasksDetailsComponent implements OnInit, AfterViewInit, OnDestroy -{ - @ViewChild('tagsPanelOrigin') private _tagsPanelOrigin: ElementRef; - @ViewChild('tagsPanel') private _tagsPanel: TemplateRef; - @ViewChild('titleField') private _titleField: ElementRef; - - tags: Tag[]; - tagsEditMode: boolean = false; - filteredTags: Tag[]; - task: Task; - taskForm: FormGroup; - tasks: Task[]; - private _tagsPanelOverlayRef: OverlayRef; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor( - private _activatedRoute: ActivatedRoute, - private _changeDetectorRef: ChangeDetectorRef, - private _formBuilder: FormBuilder, - private _renderer2: Renderer2, - private _router: Router, - private _tasksListComponent: TasksListComponent, - private _tasksService: TasksService, - private _overlay: Overlay, - private _viewContainerRef: ViewContainerRef - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Open the drawer - this._tasksListComponent.matDrawer.open(); - - // Create the task form - this.taskForm = this._formBuilder.group({ - id : [''], - type : [''], - title : [''], - notes : [''], - completed: [false], - dueDate : [null], - priority : [0], - tags : [[]], - order : [0] - }); - - // Get the tags - this._tasksService.tags$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((tags: Tag[]) => { - this.tags = tags; - this.filteredTags = tags; - - // Mark for check - this._changeDetectorRef.markForCheck(); - }); - - // Get the tasks - this._tasksService.tasks$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((tasks: Task[]) => { - this.tasks = tasks; - - // Mark for check - this._changeDetectorRef.markForCheck(); - }); - - // Get the task - this._tasksService.task$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((task: Task) => { - - // Open the drawer in case it is closed - this._tasksListComponent.matDrawer.open(); - - // Get the task - this.task = task; - - // Patch values to the form from the task - this.taskForm.patchValue(task, {emitEvent: false}); - - // Mark for check - this._changeDetectorRef.markForCheck(); - }); - - // Update task when there is a value change on the task form - this.taskForm.valueChanges - .pipe( - tap((value) => { - - // Update the task object - this.task = assign(this.task, value); - }), - debounceTime(300), - takeUntil(this._unsubscribeAll) - ) - .subscribe((value) => { - - // Update the task on the server - this._tasksService.updateTask(value.id, value).subscribe(); - - // Mark for check - this._changeDetectorRef.markForCheck(); - }); - - // Listen for NavigationEnd event to focus on the title field - this._router.events - .pipe( - takeUntil(this._unsubscribeAll), - filter(event => event instanceof NavigationEnd) - ) - .subscribe(() => { - - // Focus on the title field - this._titleField.nativeElement.focus(); - }); - } - - /** - * After view init - */ - ngAfterViewInit(): void - { - // Listen for matDrawer opened change - this._tasksListComponent.matDrawer.openedChange - .pipe( - takeUntil(this._unsubscribeAll), - filter(opened => opened) - ) - .subscribe(() => { - - // Focus on the title element - this._titleField.nativeElement.focus(); - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - - // Dispose the overlay - if ( this._tagsPanelOverlayRef ) - { - this._tagsPanelOverlayRef.dispose(); - } - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Close the drawer - */ - closeDrawer(): Promise - { - return this._tasksListComponent.matDrawer.close(); - } - - /** - * Toggle the completed status - */ - toggleCompleted(): void - { - // Get the form control for 'completed' - const completedFormControl = this.taskForm.get('completed'); - - // Toggle the completed status - completedFormControl.setValue(!completedFormControl.value); - } - - /** - * Open tags panel - */ - openTagsPanel(): void - { - // Create the overlay - this._tagsPanelOverlayRef = this._overlay.create({ - backdropClass : '', - hasBackdrop : true, - scrollStrategy : this._overlay.scrollStrategies.block(), - positionStrategy: this._overlay.position() - .flexibleConnectedTo(this._tagsPanelOrigin.nativeElement) - .withFlexibleDimensions() - .withViewportMargin(64) - .withLockedPosition() - .withPositions([ - { - originX : 'start', - originY : 'bottom', - overlayX: 'start', - overlayY: 'top' - } - ]) - }); - - // Subscribe to the attachments observable - this._tagsPanelOverlayRef.attachments().subscribe(() => { - - // Focus to the search input once the overlay has been attached - this._tagsPanelOverlayRef.overlayElement.querySelector('input').focus(); - }); - - // Create a portal from the template - const templatePortal = new TemplatePortal(this._tagsPanel, this._viewContainerRef); - - // Attach the portal to the overlay - this._tagsPanelOverlayRef.attach(templatePortal); - - // Subscribe to the backdrop click - this._tagsPanelOverlayRef.backdropClick().subscribe(() => { - - // If overlay exists and attached... - if ( this._tagsPanelOverlayRef && this._tagsPanelOverlayRef.hasAttached() ) - { - // Detach it - this._tagsPanelOverlayRef.detach(); - - // Reset the tag filter - this.filteredTags = this.tags; - - // Toggle the edit mode off - this.tagsEditMode = false; - } - - // If template portal exists and attached... - if ( templatePortal && templatePortal.isAttached ) - { - // Detach it - templatePortal.detach(); - } - }); - } - - /** - * Toggle the tags edit mode - */ - toggleTagsEditMode(): void - { - this.tagsEditMode = !this.tagsEditMode; - } - - /** - * Filter tags - * - * @param event - */ - filterTags(event): void - { - // Get the value - const value = event.target.value.toLowerCase(); - - // Filter the tags - this.filteredTags = this.tags.filter(tag => tag.title.toLowerCase().includes(value)); - } - - /** - * Filter tags input key down event - * - * @param event - */ - filterTagsInputKeyDown(event): void - { - // Return if the pressed key is not 'Enter' - if ( event.key !== 'Enter' ) - { - return; - } - - // If there is no tag available... - if ( this.filteredTags.length === 0 ) - { - // Create the tag - this.createTag(event.target.value); - - // Clear the input - event.target.value = ''; - - // Return - return; - } - - // If there is a tag... - const tag = this.filteredTags[0]; - const isTagApplied = this.task.tags.find((id) => id === tag.id); - - // If the found tag is already applied to the task... - if ( isTagApplied ) - { - // Remove the tag from the task - this.deleteTagFromTask(tag); - } - else - { - // Otherwise add the tag to the task - this.addTagToTask(tag); - } - } - - /** - * Create a new tag - * - * @param title - */ - createTag(title: string): void - { - const tag = { - title - }; - - // Create tag on the server - this._tasksService.createTag(tag) - .subscribe((response) => { - - // Add the tag to the task - this.addTagToTask(response); - }); - } - - /** - * Update the tag title - * - * @param tag - * @param event - */ - updateTagTitle(tag: Tag, event): void - { - // Update the title on the tag - tag.title = event.target.value; - - // Update the tag on the server - this._tasksService.updateTag(tag.id, tag) - .pipe(debounceTime(300)) - .subscribe(); - - // Mark for check - this._changeDetectorRef.markForCheck(); - } - - /** - * Delete the tag - * - * @param tag - */ - deleteTag(tag: Tag): void - { - // Delete the tag from the server - this._tasksService.deleteTag(tag.id).subscribe(); - - // Mark for check - this._changeDetectorRef.markForCheck(); - } - - /** - * Add tag to the task - * - * @param tag - */ - addTagToTask(tag: Tag): void - { - // Add the tag - this.task.tags.unshift(tag.id); - - // Update the task form - this.taskForm.get('tags').patchValue(this.task.tags); - - // Mark for check - this._changeDetectorRef.markForCheck(); - } - - /** - * Delete tag from the task - * - * @param tag - */ - deleteTagFromTask(tag: Tag): void - { - // Remove the tag - this.task.tags.splice(this.task.tags.findIndex(item => item === tag.id), 1); - - // Update the task form - this.taskForm.get('tags').patchValue(this.task.tags); - - // Mark for check - this._changeDetectorRef.markForCheck(); - } - - /** - * Toggle task tag - * - * @param tag - */ - toggleTaskTag(tag: Tag): void - { - if ( this.task.tags.includes(tag.id) ) - { - this.deleteTagFromTask(tag); - } - else - { - this.addTagToTask(tag); - } - } - - /** - * Should the create tag button be visible - * - * @param inputValue - */ - shouldShowCreateTagButton(inputValue: string): boolean - { - return !!!(inputValue === '' || this.tags.findIndex(tag => tag.title.toLowerCase() === inputValue.toLowerCase()) > -1); - } - - /** - * Set the task priority - * - * @param priority - */ - setTaskPriority(priority): void - { - // Set the value - this.taskForm.get('priority').setValue(priority); - } - - /** - * Check if the task is overdue or not - */ - isOverdue(): boolean - { - return moment(this.task.dueDate, moment.ISO_8601).isBefore(moment(), 'days'); - } - - /** - * Delete the task - */ - deleteTask(): void - { - // Get the current task's id - const id = this.task.id; - - // Get the next/previous task's id - const currentTaskIndex = this.tasks.findIndex(item => item.id === id); - const nextTaskIndex = currentTaskIndex + ((currentTaskIndex === (this.tasks.length - 1)) ? -1 : 1); - const nextTaskId = (this.tasks.length === 1 && this.tasks[0].id === id) ? null : this.tasks[nextTaskIndex].id; - - // Delete the task - this._tasksService.deleteTask(id) - .subscribe((isDeleted) => { - - // Return if the task wasn't deleted... - if ( !isDeleted ) - { - return; - } - - // Get the current activated route - let route = this._activatedRoute; - while ( route.firstChild ) - { - route = route.firstChild; - } - - // Navigate to the next task if available - if ( nextTaskId ) - { - this._router.navigate(['../', nextTaskId], {relativeTo: route}); - } - // Otherwise, navigate to the parent - else - { - this._router.navigate(['../'], {relativeTo: route}); - } - }); - - // Mark for check - this._changeDetectorRef.markForCheck(); - } - - /** - * Track by function for ngFor loops - * - * @param index - * @param item - */ - trackByFn(index: number, item: any): any - { - return item.id || index; - } -} diff --git a/src/app/modules/admin/apps/tasks/list/list.component.html b/src/app/modules/admin/apps/tasks/list/list.component.html deleted file mode 100644 index 58996f66..00000000 --- a/src/app/modules/admin/apps/tasks/list/list.component.html +++ /dev/null @@ -1,180 +0,0 @@ -
- - - - - - - - - - - -
- - -
- -
-
Tasks
-
- All tasks completed! - {{tasksCount.incomplete}} remaining tasks -
-
- -
- - - - -
-
- - - - - - - - -
- -
Add a task to start planning!
-
-
- -
- -
- -
- -
diff --git a/src/app/modules/admin/apps/tasks/list/list.component.ts b/src/app/modules/admin/apps/tasks/list/list.component.ts deleted file mode 100644 index 38e159d1..00000000 --- a/src/app/modules/admin/apps/tasks/list/list.component.ts +++ /dev/null @@ -1,264 +0,0 @@ -import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, OnDestroy, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; -import { DOCUMENT } from '@angular/common'; -import { ActivatedRoute, Router } from '@angular/router'; -import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop'; -import { MatDrawer } from '@angular/material/sidenav'; -import { fromEvent, Subject } from 'rxjs'; -import { filter, takeUntil } from 'rxjs/operators'; -import { FuseMediaWatcherService } from '@fuse/services/media-watcher'; -import { FuseNavigationService } from '@fuse/components/navigation'; -import { Tag, Task } from 'app/modules/admin/apps/tasks/tasks.types'; -import { TasksService } from 'app/modules/admin/apps/tasks/tasks.service'; - -@Component({ - selector : 'tasks-list', - templateUrl : './list.component.html', - encapsulation : ViewEncapsulation.None, - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class TasksListComponent implements OnInit, OnDestroy -{ - @ViewChild('matDrawer', {static: true}) matDrawer: MatDrawer; - - drawerMode: 'side' | 'over'; - selectedTask: Task; - tags: Tag[]; - tasks: Task[]; - tasksCount: any = { - completed : 0, - incomplete: 0, - total : 0 - }; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor( - private _activatedRoute: ActivatedRoute, - private _changeDetectorRef: ChangeDetectorRef, - @Inject(DOCUMENT) private _document: any, - private _router: Router, - private _tasksService: TasksService, - private _fuseMediaWatcherService: FuseMediaWatcherService, - private _fuseNavigationService: FuseNavigationService - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Get the tags - this._tasksService.tags$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((tags: Tag[]) => { - this.tags = tags; - - // Mark for check - this._changeDetectorRef.markForCheck(); - }); - - // Get the tasks - this._tasksService.tasks$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((tasks: Task[]) => { - this.tasks = tasks; - - // Update the counts - this.tasksCount.total = this.tasks.filter(task => task.type === 'task').length; - this.tasksCount.completed = this.tasks.filter(task => task.type === 'task' && task.completed).length; - this.tasksCount.incomplete = this.tasksCount.total - this.tasksCount.completed; - - // Mark for check - this._changeDetectorRef.markForCheck(); - - // Update the count on the navigation - setTimeout(() => { - - // Get the component -> navigation data -> item - const mainNavigationComponent = this._fuseNavigationService.getComponent('mainNavigation'); - - // If the main navigation component exists... - if ( mainNavigationComponent ) - { - const mainNavigation = mainNavigationComponent.navigation; - const menuItem = this._fuseNavigationService.getItem('apps.tasks', mainNavigation); - - // Update the subtitle of the item - menuItem.subtitle = this.tasksCount.incomplete + ' remaining tasks'; - - // Refresh the navigation - mainNavigationComponent.refresh(); - } - }); - }); - - // Get the task - this._tasksService.task$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((task: Task) => { - this.selectedTask = task; - - // Mark for check - this._changeDetectorRef.markForCheck(); - }); - - // Subscribe to media query change - this._fuseMediaWatcherService.onMediaQueryChange$('(min-width: 1440px)') - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((state) => { - - // Calculate the drawer mode - this.drawerMode = state.matches ? 'side' : 'over'; - - // Mark for check - this._changeDetectorRef.markForCheck(); - }); - - // Listen for shortcuts - fromEvent(this._document, 'keydown') - .pipe( - takeUntil(this._unsubscribeAll), - filter((event) => { - return (event.ctrlKey === true || event.metaKey) // Ctrl or Cmd - && (event.key === '/' || event.key === '.'); // '/' or '.' key - }) - ) - .subscribe((event: KeyboardEvent) => { - - // If the '/' pressed - if ( event.key === '/' ) - { - this.createTask('task'); - } - - // If the '.' pressed - if ( event.key === '.' ) - { - this.createTask('section'); - } - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Go to task - * - * @param id - */ - goToTask(id: string): void - { - // Get the current activated route - let route = this._activatedRoute; - while ( route.firstChild ) - { - route = route.firstChild; - } - - // Go to task - this._router.navigate(['../', id], {relativeTo: route}); - - // Mark for check - this._changeDetectorRef.markForCheck(); - } - - /** - * On backdrop clicked - */ - onBackdropClicked(): void - { - // Get the current activated route - let route = this._activatedRoute; - while ( route.firstChild ) - { - route = route.firstChild; - } - - // Go to the parent route - this._router.navigate(['../'], {relativeTo: route}); - - // Mark for check - this._changeDetectorRef.markForCheck(); - } - - /** - * Create task - * - * @param type - */ - createTask(type: 'task' | 'section'): void - { - // Create the task - this._tasksService.createTask(type).subscribe((newTask) => { - - // Go to new task - this.goToTask(newTask.id); - }); - } - - /** - * Toggle the completed status - * of the given task - * - * @param task - */ - toggleCompleted(task: Task): void - { - // Toggle the completed status - task.completed = !task.completed; - - // Update the task on the server - this._tasksService.updateTask(task.id, task).subscribe(); - - // Mark for check - this._changeDetectorRef.markForCheck(); - } - - /** - * Task dropped - * - * @param event - */ - dropped(event: CdkDragDrop): void - { - // Move the item in the array - moveItemInArray(event.container.data, event.previousIndex, event.currentIndex); - - // Save the new order - this._tasksService.updateTasksOrders(event.container.data).subscribe(); - - // Mark for check - this._changeDetectorRef.markForCheck(); - } - - /** - * Track by function for ngFor loops - * - * @param index - * @param item - */ - trackByFn(index: number, item: any): any - { - return item.id || index; - } -} diff --git a/src/app/modules/admin/apps/tasks/tasks.component.html b/src/app/modules/admin/apps/tasks/tasks.component.html deleted file mode 100644 index 0680b43f..00000000 --- a/src/app/modules/admin/apps/tasks/tasks.component.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/app/modules/admin/apps/tasks/tasks.component.ts b/src/app/modules/admin/apps/tasks/tasks.component.ts deleted file mode 100644 index 71908160..00000000 --- a/src/app/modules/admin/apps/tasks/tasks.component.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core'; - -@Component({ - selector : 'tasks', - templateUrl : './tasks.component.html', - encapsulation : ViewEncapsulation.None, - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class TasksComponent -{ - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/apps/tasks/tasks.guards.ts b/src/app/modules/admin/apps/tasks/tasks.guards.ts deleted file mode 100644 index 382fac9f..00000000 --- a/src/app/modules/admin/apps/tasks/tasks.guards.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { Injectable } from '@angular/core'; -import { ActivatedRouteSnapshot, CanDeactivate, RouterStateSnapshot, UrlTree } from '@angular/router'; -import { Observable } from 'rxjs'; -import { TasksDetailsComponent } from 'app/modules/admin/apps/tasks/details/details.component'; - -@Injectable({ - providedIn: 'root' -}) -export class CanDeactivateTasksDetails implements CanDeactivate -{ - canDeactivate( - component: TasksDetailsComponent, - currentRoute: ActivatedRouteSnapshot, - currentState: RouterStateSnapshot, - nextState: RouterStateSnapshot - ): Observable | Promise | boolean | UrlTree - { - // Get the next route - let nextRoute: ActivatedRouteSnapshot = nextState.root; - while ( nextRoute.firstChild ) - { - nextRoute = nextRoute.firstChild; - } - - // If the next state doesn't contain '/tasks' - // it means we are navigating away from the - // tasks app - if ( !nextState.url.includes('/tasks') ) - { - // Let it navigate - return true; - } - - // If we are navigating to another task... - if ( nextRoute.paramMap.get('id') ) - { - // Just navigate - return true; - } - // Otherwise... - else - { - // Close the drawer first, and then navigate - return component.closeDrawer().then(() => { - return true; - }); - } - } -} diff --git a/src/app/modules/admin/apps/tasks/tasks.module.ts b/src/app/modules/admin/apps/tasks/tasks.module.ts deleted file mode 100644 index b6a8e939..00000000 --- a/src/app/modules/admin/apps/tasks/tasks.module.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { DragDropModule } from '@angular/cdk/drag-drop'; -import { MatAutocompleteModule } from '@angular/material/autocomplete'; -import { MatButtonModule } from '@angular/material/button'; -import { MatCheckboxModule } from '@angular/material/checkbox'; -import { MAT_DATE_FORMATS, MatRippleModule } from '@angular/material/core'; -import { MatDatepickerModule } from '@angular/material/datepicker'; -import { MatDividerModule } from '@angular/material/divider'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatIconModule } from '@angular/material/icon'; -import { MatInputModule } from '@angular/material/input'; -import { MatMenuModule } from '@angular/material/menu'; -import { MatMomentDateModule } from '@angular/material-moment-adapter'; -import { MatProgressBarModule } from '@angular/material/progress-bar'; -import { MatRadioModule } from '@angular/material/radio'; -import { MatSelectModule } from '@angular/material/select'; -import { MatSidenavModule } from '@angular/material/sidenav'; -import { MatTooltipModule } from '@angular/material/tooltip'; -import * as moment from 'moment'; -import { FuseAutogrowModule } from '@fuse/directives/autogrow'; -import { FuseFindByKeyPipeModule } from '@fuse/pipes/find-by-key'; -import { SharedModule } from 'app/shared/shared.module'; -import { tasksRoutes } from 'app/modules/admin/apps/tasks/tasks.routing'; -import { TasksComponent } from 'app/modules/admin/apps/tasks/tasks.component'; -import { TasksDetailsComponent } from 'app/modules/admin/apps/tasks/details/details.component'; -import { TasksListComponent } from 'app/modules/admin/apps/tasks/list/list.component'; - -@NgModule({ - declarations: [ - TasksComponent, - TasksDetailsComponent, - TasksListComponent - ], - imports : [ - RouterModule.forChild(tasksRoutes), - DragDropModule, - MatAutocompleteModule, - MatButtonModule, - MatCheckboxModule, - MatDatepickerModule, - MatDividerModule, - MatFormFieldModule, - MatIconModule, - MatInputModule, - MatMenuModule, - MatMomentDateModule, - MatProgressBarModule, - MatRadioModule, - MatRippleModule, - MatSelectModule, - MatSidenavModule, - MatTooltipModule, - FuseAutogrowModule, - FuseFindByKeyPipeModule, - SharedModule - ], - providers : [ - { - provide : MAT_DATE_FORMATS, - useValue: { - parse : { - dateInput: moment.ISO_8601 - }, - display: { - dateInput : 'll', - monthYearLabel : 'MMM YYYY', - dateA11yLabel : 'LL', - monthYearA11yLabel: 'MMMM YYYY' - } - } - } - ] -}) -export class TasksModule -{ -} diff --git a/src/app/modules/admin/apps/tasks/tasks.resolvers.ts b/src/app/modules/admin/apps/tasks/tasks.resolvers.ts deleted file mode 100644 index 088110b9..00000000 --- a/src/app/modules/admin/apps/tasks/tasks.resolvers.ts +++ /dev/null @@ -1,110 +0,0 @@ -import { Injectable } from '@angular/core'; -import { ActivatedRouteSnapshot, Resolve, Router, RouterStateSnapshot } from '@angular/router'; -import { Observable, throwError } from 'rxjs'; -import { catchError } from 'rxjs/operators'; -import { TasksService } from 'app/modules/admin/apps/tasks/tasks.service'; -import { Tag, Task } from 'app/modules/admin/apps/tasks/tasks.types'; - -@Injectable({ - providedIn: 'root' -}) -export class TasksTagsResolver implements Resolve -{ - /** - * Constructor - */ - constructor(private _tasksService: TasksService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Resolver - * - * @param route - * @param state - */ - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable - { - return this._tasksService.getTags(); - } -} - -@Injectable({ - providedIn: 'root' -}) -export class TasksResolver implements Resolve -{ - /** - * Constructor - */ - constructor(private _tasksService: TasksService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Resolver - * - * @param route - * @param state - */ - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable - { - return this._tasksService.getTasks(); - } -} - -@Injectable({ - providedIn: 'root' -}) -export class TasksTaskResolver implements Resolve -{ - /** - * Constructor - */ - constructor( - private _router: Router, - private _tasksService: TasksService - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Resolver - * - * @param route - * @param state - */ - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable - { - return this._tasksService.getTaskById(route.paramMap.get('id')) - .pipe( - // Error here means the requested task is not available - catchError((error) => { - - // Log the error - console.error(error); - - // Get the parent url - const parentUrl = state.url.split('/').slice(0, -1).join('/'); - - // Navigate to there - this._router.navigateByUrl(parentUrl); - - // Throw an error - return throwError(error); - }) - ); - } -} diff --git a/src/app/modules/admin/apps/tasks/tasks.routing.ts b/src/app/modules/admin/apps/tasks/tasks.routing.ts deleted file mode 100644 index ead2c636..00000000 --- a/src/app/modules/admin/apps/tasks/tasks.routing.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { Route } from '@angular/router'; -import { CanDeactivateTasksDetails } from 'app/modules/admin/apps/tasks/tasks.guards'; -import { TasksResolver, TasksTagsResolver, TasksTaskResolver } from 'app/modules/admin/apps/tasks/tasks.resolvers'; -import { TasksComponent } from 'app/modules/admin/apps/tasks/tasks.component'; -import { TasksListComponent } from 'app/modules/admin/apps/tasks/list/list.component'; -import { TasksDetailsComponent } from 'app/modules/admin/apps/tasks/details/details.component'; - -export const tasksRoutes: Route[] = [ - { - path : '', - component: TasksComponent, - resolve : { - tags: TasksTagsResolver - }, - children : [ - { - path : '', - component: TasksListComponent, - resolve : { - tasks: TasksResolver - }, - children : [ - { - path : ':id', - component : TasksDetailsComponent, - resolve : { - task: TasksTaskResolver - }, - canDeactivate: [CanDeactivateTasksDetails] - } - ] - } - ] - } -]; diff --git a/src/app/modules/admin/apps/tasks/tasks.service.ts b/src/app/modules/admin/apps/tasks/tasks.service.ts deleted file mode 100644 index 633eac64..00000000 --- a/src/app/modules/admin/apps/tasks/tasks.service.ts +++ /dev/null @@ -1,327 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient } from '@angular/common/http'; -import { BehaviorSubject, Observable, of, throwError } from 'rxjs'; -import { filter, map, switchMap, take, tap } from 'rxjs/operators'; -import { Tag, Task } from 'app/modules/admin/apps/tasks/tasks.types'; - -@Injectable({ - providedIn: 'root' -}) -export class TasksService -{ - // Private - private _tags: BehaviorSubject = new BehaviorSubject(null); - private _task: BehaviorSubject = new BehaviorSubject(null); - private _tasks: BehaviorSubject = new BehaviorSubject(null); - - /** - * Constructor - */ - constructor(private _httpClient: HttpClient) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Accessors - // ----------------------------------------------------------------------------------------------------- - - /** - * Getter for tags - */ - get tags$(): Observable - { - return this._tags.asObservable(); - } - - /** - * Getter for task - */ - get task$(): Observable - { - return this._task.asObservable(); - } - - /** - * Getter for tasks - */ - get tasks$(): Observable - { - return this._tasks.asObservable(); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Get tags - */ - getTags(): Observable - { - return this._httpClient.get('api/apps/tasks/tags').pipe( - tap((response: any) => { - this._tags.next(response); - }) - ); - } - - /** - * Crate tag - * - * @param tag - */ - createTag(tag: Tag): Observable - { - return this.tags$.pipe( - take(1), - switchMap(tags => this._httpClient.post('api/apps/tasks/tag', {tag}).pipe( - map((newTag) => { - - // Update the tags with the new tag - this._tags.next([...tags, newTag]); - - // Return new tag from observable - return newTag; - }) - )) - ); - } - - /** - * Update the tag - * - * @param id - * @param tag - */ - updateTag(id: string, tag: Tag): Observable - { - return this.tags$.pipe( - take(1), - switchMap(tags => this._httpClient.patch('api/apps/tasks/tag', { - id, - tag - }).pipe( - map((updatedTag) => { - - // Find the index of the updated tag - const index = tags.findIndex(item => item.id === id); - - // Update the tag - tags[index] = updatedTag; - - // Update the tags - this._tags.next(tags); - - // Return the updated tag - return updatedTag; - }) - )) - ); - } - - /** - * Delete the tag - * - * @param id - */ - deleteTag(id: string): Observable - { - return this.tags$.pipe( - take(1), - switchMap(tags => this._httpClient.delete('api/apps/tasks/tag', {params: {id}}).pipe( - map((isDeleted: boolean) => { - - // Find the index of the deleted tag - const index = tags.findIndex(item => item.id === id); - - // Delete the tag - tags.splice(index, 1); - - // Update the tags - this._tags.next(tags); - - // Return the deleted status - return isDeleted; - }), - filter(isDeleted => isDeleted), - switchMap(isDeleted => this.tasks$.pipe( - take(1), - map((tasks) => { - - // Iterate through the tasks - tasks.forEach((task) => { - - const tagIndex = task.tags.findIndex(tag => tag === id); - - // If the task has a tag, remove it - if ( tagIndex > -1 ) - { - task.tags.splice(tagIndex, 1); - } - }); - - // Return the deleted status - return isDeleted; - }) - )) - )) - ); - } - - /** - * Get tasks - */ - getTasks(): Observable - { - return this._httpClient.get('api/apps/tasks/all').pipe( - tap((response) => { - this._tasks.next(response); - }) - ); - } - - /** - * Update tasks orders - * - * @param tasks - */ - updateTasksOrders(tasks: Task[]): Observable - { - return this._httpClient.patch('api/apps/tasks/order', {tasks}); - } - - /** - * Search tasks with given query - * - * @param query - */ - searchTasks(query: string): Observable - { - return this._httpClient.get('api/apps/tasks/search', {params: {query}}); - } - - /** - * Get task by id - */ - getTaskById(id: string): Observable - { - return this._tasks.pipe( - take(1), - map((tasks) => { - - // Find the task - const task = tasks.find(item => item.id === id) || null; - - // Update the task - this._task.next(task); - - // Return the task - return task; - }), - switchMap((task) => { - - if ( !task ) - { - return throwError('Could not found task with id of ' + id + '!'); - } - - return of(task); - }) - ); - } - - /** - * Create task - * - * @param type - */ - createTask(type: string): Observable - { - return this.tasks$.pipe( - take(1), - switchMap((tasks) => this._httpClient.post('api/apps/tasks/task', {type}).pipe( - map((newTask) => { - - // Update the tasks with the new task - this._tasks.next([newTask, ...tasks]); - - // Return the new task - return newTask; - }) - )) - ); - } - - /** - * Update task - * - * @param id - * @param task - */ - updateTask(id: string, task: Task): Observable - { - return this.tasks$ - .pipe( - take(1), - switchMap(tasks => this._httpClient.patch('api/apps/tasks/task', { - id, - task - }).pipe( - map((updatedTask) => { - - // Find the index of the updated task - const index = tasks.findIndex(item => item.id === id); - - // Update the task - tasks[index] = updatedTask; - - // Update the tasks - this._tasks.next(tasks); - - // Return the updated task - return updatedTask; - }), - switchMap(updatedTask => this.task$.pipe( - take(1), - filter(item => item && item.id === id), - tap(() => { - - // Update the task if it's selected - this._task.next(updatedTask); - - // Return the updated task - return updatedTask; - }) - )) - )) - ); - } - - /** - * Delete the task - * - * @param id - */ - deleteTask(id: string): Observable - { - return this.tasks$.pipe( - take(1), - switchMap(tasks => this._httpClient.delete('api/apps/tasks/task', {params: {id}}).pipe( - map((isDeleted: boolean) => { - - // Find the index of the deleted task - const index = tasks.findIndex(item => item.id === id); - - // Delete the task - tasks.splice(index, 1); - - // Update the tasks - this._tasks.next(tasks); - - // Return the deleted status - return isDeleted; - }) - )) - ); - } -} diff --git a/src/app/modules/admin/apps/tasks/tasks.types.ts b/src/app/modules/admin/apps/tasks/tasks.types.ts deleted file mode 100644 index d66b6b0d..00000000 --- a/src/app/modules/admin/apps/tasks/tasks.types.ts +++ /dev/null @@ -1,18 +0,0 @@ -export interface Tag -{ - id?: string; - title?: string; -} - -export interface Task -{ - id: string; - type: 'task' | 'section'; - title: string; - notes: string; - completed: boolean; - dueDate: string | null; - priority: 0 | 1 | 2; - tags: string[]; - order: number; -} diff --git a/src/app/modules/admin/dashboards/analytics/analytics.component.html b/src/app/modules/admin/dashboards/analytics/analytics.component.html deleted file mode 100644 index 584e0426..00000000 --- a/src/app/modules/admin/dashboards/analytics/analytics.component.html +++ /dev/null @@ -1,509 +0,0 @@ -
- -
- - -
-
-
Analytics dashboard
-
Monitor metrics, check reports and review performance
-
-
- - - - -
- - - - - -
-
-
- -
- -
-
-
-
Visitors Overview
-
Number of unique visitors
-
-
- -
- - - - - -
-
-
-
- -
-
- -
-
-
Conversions
-
- - - - - - -
-
-
-
{{data.conversions.amount | number:'1.0-0'}}
-
- -
- 2% - below target -
-
-
-
- -
-
- -
-
-
Impressions
-
- - - - - - -
-
-
-
{{data.impressions.amount | number:'1.0-0'}}
-
- -
- 4% - below target -
-
-
-
- -
-
- -
-
-
Visits
-
- - - - - - -
-
-
-
{{data.visits.amount | number:'1.0-0'}}
-
- -
- 4% - below target -
-
-
-
- -
-
-
- - -
-
-
Visitors vs. Page Views
-
- - - - - - -
-
-
-
-
-
-
Overall Score
- -
-
-
{{data.visitorsVsPageViews.overallScore}}
-
- -
42.9%
-
-
-
-
-
-
Average Ratio
- -
-
-
{{data.visitorsVsPageViews.averageRatio | number:'1.0-0'}}%
-
- -
13.1%
-
-
-
-
-
-
Predicted Ratio
- -
-
-
{{data.visitorsVsPageViews.predictedRatio | number:'1.0-0'}}%
-
- -
22.2%
-
-
-
-
-
-
- -
-
- - -
-
Your Audience
-
Demographic properties of your users
-
-
- -
-
-
New vs. Returning
-
- - - - - - -
-
-
- -
-
-
- -
-
-
-
{{data.newVsReturning.labels[i]}}
-
-
{{data.newVsReturning.uniqueVisitors * dataset / 100 | number:'1.0-0'}}
-
{{dataset}}%
-
-
-
-
-
- -
-
-
Gender
-
- - - - - - -
-
-
- -
-
-
- -
-
-
-
{{data.gender.labels[i]}}
-
-
{{data.gender.uniqueVisitors * dataset / 100 | number:'1.0-0'}}
-
{{dataset}}%
-
-
-
-
-
- -
-
-
Age
-
- - - - - - -
-
-
- -
-
-
- -
-
-
-
{{data.age.labels[i]}}
-
-
{{data.age.uniqueVisitors * dataset / 100 | number:'1.0-0'}}
-
{{dataset}}%
-
-
-
-
-
- -
-
-
Language
-
- - - - - - -
-
-
- -
-
-
- -
-
-
-
{{data.language.labels[i]}}
-
-
{{data.language.uniqueVisitors * dataset / 100 | number:'1.0-0'}}
-
{{dataset}}%
-
-
-
-
-
-
- -
- -
diff --git a/src/app/modules/admin/dashboards/analytics/analytics.component.ts b/src/app/modules/admin/dashboards/analytics/analytics.component.ts deleted file mode 100644 index e8e6d52c..00000000 --- a/src/app/modules/admin/dashboards/analytics/analytics.component.ts +++ /dev/null @@ -1,676 +0,0 @@ -import { ChangeDetectionStrategy, Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { Router } from '@angular/router'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import { ApexOptions } from 'ng-apexcharts'; -import { AnalyticsService } from 'app/modules/admin/dashboards/analytics/analytics.service'; - -@Component({ - selector : 'analytics', - templateUrl : './analytics.component.html', - encapsulation : ViewEncapsulation.None, - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class AnalyticsComponent implements OnInit, OnDestroy -{ - chartVisitors: ApexOptions; - chartConversions: ApexOptions; - chartImpressions: ApexOptions; - chartVisits: ApexOptions; - chartVisitorsVsPageViews: ApexOptions; - data: any; - private _unsubscribeAll: Subject = new Subject(); - - chartAge: ApexOptions; - averagePurchaseValueOptions: ApexOptions; - browsersOptions: ApexOptions; - channelsOptions: ApexOptions; - devicesOptions: ApexOptions; - chartGender: ApexOptions; - chartLanguage: ApexOptions; - chartNewVsReturning: ApexOptions; - refundsOptions: ApexOptions; - totalVisitsOptions: ApexOptions; - uniqueVisitorsOptions: ApexOptions; - uniquePurchasesOptions: ApexOptions; - - /** - * Constructor - */ - constructor( - private _analyticsService: AnalyticsService, - private _router: Router - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Get the data - this._analyticsService.data$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((data) => { - - // Store the data - this.data = data; - - // Prepare the chart data - this._prepareChartData(); - }); - - // Attach SVG fill fixer to all ApexCharts - window['Apex'] = { - chart: { - events: { - mounted: (chart: any, options?: any) => { - this._fixSvgFill(chart.el); - }, - updated: (chart: any, options?: any) => { - this._fixSvgFill(chart.el); - } - } - } - }; - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Private methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Fix the SVG fill references. This fix must be applied to all ApexCharts - * charts in order to fix 'black color on gradient fills on certain browsers' - * issue caused by the '' tag. - * - * Fix based on https://gist.github.com/Kamshak/c84cdc175209d1a30f711abd6a81d472 - * - * @param element - * @private - */ - private _fixSvgFill(element: Element): void - { - // Current URL - const currentURL = this._router.url; - - // 1. Find all elements with 'fill' attribute within the element - // 2. Filter out the ones that doesn't have cross reference so we only left with the ones that use the 'url(#id)' syntax - // 3. Insert the 'currentURL' at the front of the 'fill' attribute value - Array.from(element.querySelectorAll('*[fill]')) - .filter((el) => el.getAttribute('fill').indexOf('url(') !== -1) - .forEach((el) => { - const attrVal = el.getAttribute('fill'); - el.setAttribute('fill', `url(${currentURL}${attrVal.slice(attrVal.indexOf('#'))}`); - }); - } - - /** - * Prepare the chart data from the data - * - * @private - */ - private _prepareChartData(): void - { - // Visitors - this.chartVisitors = { - chart : { - animations: { - speed : 400, - animateGradually: { - enabled: false - } - }, - fontFamily: 'inherit', - foreColor : 'inherit', - width : '100%', - height : '100%', - type : 'area', - toolbar : { - show: false - }, - zoom : { - enabled: false - } - }, - colors : ['#818CF8'], - dataLabels: { - enabled: false - }, - fill : { - colors: ['#312E81'] - }, - grid : { - show : true, - borderColor: '#334155', - padding : { - top : 10, - bottom: -40, - left : 0, - right : 0 - }, - position : 'back', - xaxis : { - lines: { - show: true - } - } - }, - series : this.data.visitors.series, - stroke : { - width: 2 - }, - tooltip : { - followCursor: true, - theme : 'dark', - x : { - format: 'MMM dd, yyyy' - }, - y : { - formatter(value: number): string - { - return `${value}`; - } - } - }, - xaxis : { - axisBorder: { - show: false - }, - axisTicks : { - show: false - }, - crosshairs: { - stroke: { - color : '#475569', - dashArray: 0, - width : 2 - } - }, - labels : { - offsetY: -20, - style : { - colors: '#CBD5E1' - } - }, - tickAmount: 20, - tooltip : { - enabled: false - }, - type : 'datetime' - }, - yaxis : { - axisTicks : { - show: false - }, - axisBorder: { - show: false - }, - min : min => min - 750, - max : max => max + 250, - tickAmount: 5, - show : false - } - }; - - // Conversions - this.chartConversions = { - chart : { - animations: { - enabled: false - }, - fontFamily: 'inherit', - foreColor : 'inherit', - height : '100%', - type : 'area', - sparkline : { - enabled: true - } - }, - colors : ['#38BDF8'], - fill : { - colors : ['#38BDF8'], - opacity: 0.5 - }, - series : this.data.conversions.series, - stroke : { - curve: 'smooth' - }, - tooltip: { - followCursor: true, - theme : 'dark' - }, - xaxis : { - type : 'category', - categories: this.data.conversions.labels - }, - yaxis : { - labels: { - formatter: (val) => { - return val.toString(); - } - } - } - }; - - // Impressions - this.chartImpressions = { - chart : { - animations: { - enabled: false - }, - fontFamily: 'inherit', - foreColor : 'inherit', - height : '100%', - type : 'area', - sparkline : { - enabled: true - } - }, - colors : ['#34D399'], - fill : { - colors : ['#34D399'], - opacity: 0.5 - }, - series : this.data.impressions.series, - stroke : { - curve: 'smooth' - }, - tooltip: { - followCursor: true, - theme : 'dark' - }, - xaxis : { - type : 'category', - categories: this.data.impressions.labels - }, - yaxis : { - labels: { - formatter: (val) => { - return val.toString(); - } - } - } - }; - - // Visits - this.chartVisits = { - chart : { - animations: { - enabled: false - }, - fontFamily: 'inherit', - foreColor : 'inherit', - height : '100%', - type : 'area', - sparkline : { - enabled: true - } - }, - colors : ['#FB7185'], - fill : { - colors : ['#FB7185'], - opacity: 0.5 - }, - series : this.data.visits.series, - stroke : { - curve: 'smooth' - }, - tooltip: { - followCursor: true, - theme : 'dark' - }, - xaxis : { - type : 'category', - categories: this.data.visits.labels - }, - yaxis : { - labels: { - formatter: (val) => { - return val.toString(); - } - } - } - }; - - // Visitors vs Page Views - this.chartVisitorsVsPageViews = { - chart : { - animations: { - enabled: false - }, - fontFamily: 'inherit', - foreColor : 'inherit', - height : '100%', - type : 'area', - toolbar : { - show: false - }, - zoom : { - enabled: false - } - }, - colors : ['#64748B', '#94A3B8'], - dataLabels: { - enabled: false - }, - fill : { - colors : ['#64748B', '#94A3B8'], - opacity: 0.5 - }, - grid : { - show : false, - padding: { - bottom: -40, - left : 0, - right : 0 - } - }, - legend : { - show: false - }, - series : this.data.visitorsVsPageViews.series, - stroke : { - curve: 'smooth', - width: 2 - }, - tooltip : { - followCursor: true, - theme : 'dark', - x : { - format: 'MMM dd, yyyy' - } - }, - xaxis : { - axisBorder: { - show: false - }, - labels : { - offsetY: -20, - rotate : 0, - style : { - colors: 'var(--fuse-text-secondary)' - } - }, - tickAmount: 3, - tooltip : { - enabled: false - }, - type : 'datetime' - }, - yaxis : { - labels : { - style: { - colors: 'var(--fuse-text-secondary)' - } - }, - max : max => max + 250, - min : min => min - 250, - show : false, - tickAmount: 5 - } - }; - - // New vs. returning - this.chartNewVsReturning = { - chart : { - animations: { - speed : 400, - animateGradually: { - enabled: false - } - }, - fontFamily: 'inherit', - foreColor : 'inherit', - height : '100%', - type : 'donut', - sparkline : { - enabled: true - } - }, - colors : ['#3182CE', '#63B3ED'], - labels : this.data.newVsReturning.labels, - plotOptions: { - pie: { - customScale : 0.9, - expandOnClick: false, - donut : { - size: '70%' - } - } - }, - series : this.data.newVsReturning.series, - states : { - hover : { - filter: { - type: 'none' - } - }, - active: { - filter: { - type: 'none' - } - } - }, - tooltip : { - enabled : true, - fillSeriesColor: false, - theme : 'dark', - custom : ({ - seriesIndex, - w - }) => { - return `
-
-
${w.config.labels[seriesIndex]}:
-
${w.config.series[seriesIndex]}%
-
`; - } - } - }; - - // Gender - this.chartGender = { - chart : { - animations: { - speed : 400, - animateGradually: { - enabled: false - } - }, - fontFamily: 'inherit', - foreColor : 'inherit', - height : '100%', - type : 'donut', - sparkline : { - enabled: true - } - }, - colors : ['#319795', '#4FD1C5'], - labels : this.data.gender.labels, - plotOptions: { - pie: { - customScale : 0.9, - expandOnClick: false, - donut : { - size: '70%' - } - } - }, - series : this.data.gender.series, - states : { - hover : { - filter: { - type: 'none' - } - }, - active: { - filter: { - type: 'none' - } - } - }, - tooltip : { - enabled : true, - fillSeriesColor: false, - theme : 'dark', - custom : ({ - seriesIndex, - w - }) => { - return `
-
-
${w.config.labels[seriesIndex]}:
-
${w.config.series[seriesIndex]}%
-
`; - } - } - }; - - // Age - this.chartAge = { - chart : { - animations: { - speed : 400, - animateGradually: { - enabled: false - } - }, - fontFamily: 'inherit', - foreColor : 'inherit', - height : '100%', - type : 'donut', - sparkline : { - enabled: true - } - }, - colors : ['#DD6B20', '#F6AD55'], - labels : this.data.age.labels, - plotOptions: { - pie: { - customScale : 0.9, - expandOnClick: false, - donut : { - size: '70%' - } - } - }, - series : this.data.age.series, - states : { - hover : { - filter: { - type: 'none' - } - }, - active: { - filter: { - type: 'none' - } - } - }, - tooltip : { - enabled : true, - fillSeriesColor: false, - theme : 'dark', - custom : ({ - seriesIndex, - w - }) => { - return `
-
-
${w.config.labels[seriesIndex]}:
-
${w.config.series[seriesIndex]}%
-
`; - } - } - }; - - // Language - this.chartLanguage = { - chart : { - animations: { - speed : 400, - animateGradually: { - enabled: false - } - }, - fontFamily: 'inherit', - foreColor : 'inherit', - height : '100%', - type : 'donut', - sparkline : { - enabled: true - } - }, - colors : ['#805AD5', '#B794F4'], - labels : this.data.language.labels, - plotOptions: { - pie: { - customScale : 0.9, - expandOnClick: false, - donut : { - size: '70%' - } - } - }, - series : this.data.language.series, - states : { - hover : { - filter: { - type: 'none' - } - }, - active: { - filter: { - type: 'none' - } - } - }, - tooltip : { - enabled : true, - fillSeriesColor: false, - theme : 'dark', - custom : ({ - seriesIndex, - w - }) => { - return `
-
-
${w.config.labels[seriesIndex]}:
-
${w.config.series[seriesIndex]}%
-
`; - } - } - }; - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Track by function for ngFor loops - * - * @param index - * @param item - */ - trackByFn(index: number, item: any): any - { - return item.id || index; - } -} diff --git a/src/app/modules/admin/dashboards/analytics/analytics.module.ts b/src/app/modules/admin/dashboards/analytics/analytics.module.ts deleted file mode 100644 index eceae951..00000000 --- a/src/app/modules/admin/dashboards/analytics/analytics.module.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { MatButtonModule } from '@angular/material/button'; -import { MatButtonToggleModule } from '@angular/material/button-toggle'; -import { MatDividerModule } from '@angular/material/divider'; -import { MatIconModule } from '@angular/material/icon'; -import { MatMenuModule } from '@angular/material/menu'; -import { MatProgressBarModule } from '@angular/material/progress-bar'; -import { MatSortModule } from '@angular/material/sort'; -import { MatTableModule } from '@angular/material/table'; -import { MatTooltipModule } from '@angular/material/tooltip'; -import { NgApexchartsModule } from 'ng-apexcharts'; -import { SharedModule } from 'app/shared/shared.module'; -import { AnalyticsComponent } from 'app/modules/admin/dashboards/analytics/analytics.component'; -import { analyticsRoutes } from 'app/modules/admin/dashboards/analytics/analytics.routing'; - -@NgModule({ - declarations: [ - AnalyticsComponent - ], - imports : [ - RouterModule.forChild(analyticsRoutes), - MatButtonModule, - MatButtonToggleModule, - MatDividerModule, - MatIconModule, - MatMenuModule, - MatProgressBarModule, - MatSortModule, - MatTableModule, - MatTooltipModule, - NgApexchartsModule, - SharedModule - ] -}) -export class AnalyticsModule -{ -} diff --git a/src/app/modules/admin/dashboards/analytics/analytics.resolvers.ts b/src/app/modules/admin/dashboards/analytics/analytics.resolvers.ts deleted file mode 100644 index 46b9a613..00000000 --- a/src/app/modules/admin/dashboards/analytics/analytics.resolvers.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { Injectable } from '@angular/core'; -import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router'; -import { Observable } from 'rxjs'; -import { AnalyticsService } from 'app/modules/admin/dashboards/analytics/analytics.service'; - -@Injectable({ - providedIn: 'root' -}) -export class AnalyticsResolver implements Resolve -{ - /** - * Constructor - */ - constructor(private _analyticsService: AnalyticsService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Resolver - * - * @param route - * @param state - */ - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable - { - return this._analyticsService.getData(); - } -} diff --git a/src/app/modules/admin/dashboards/analytics/analytics.routing.ts b/src/app/modules/admin/dashboards/analytics/analytics.routing.ts deleted file mode 100644 index a912b8f2..00000000 --- a/src/app/modules/admin/dashboards/analytics/analytics.routing.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Route } from '@angular/router'; -import { AnalyticsComponent } from 'app/modules/admin/dashboards/analytics/analytics.component'; -import { AnalyticsResolver } from 'app/modules/admin/dashboards/analytics/analytics.resolvers'; - -export const analyticsRoutes: Route[] = [ - { - path : '', - component: AnalyticsComponent, - resolve : { - data: AnalyticsResolver - } - } -]; diff --git a/src/app/modules/admin/dashboards/analytics/analytics.service.ts b/src/app/modules/admin/dashboards/analytics/analytics.service.ts deleted file mode 100644 index 17d8b1d6..00000000 --- a/src/app/modules/admin/dashboards/analytics/analytics.service.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient } from '@angular/common/http'; -import { BehaviorSubject, Observable } from 'rxjs'; -import { tap } from 'rxjs/operators'; - -@Injectable({ - providedIn: 'root' -}) -export class AnalyticsService -{ - private _data: BehaviorSubject = new BehaviorSubject(null); - - /** - * Constructor - */ - constructor(private _httpClient: HttpClient) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Accessors - // ----------------------------------------------------------------------------------------------------- - - /** - * Getter for data - */ - get data$(): Observable - { - return this._data.asObservable(); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Get data - */ - getData(): Observable - { - return this._httpClient.get('api/dashboards/analytics').pipe( - tap((response: any) => { - this._data.next(response); - }) - ); - } -} diff --git a/src/app/modules/admin/dashboards/project/project.component.html b/src/app/modules/admin/dashboards/project/project.component.html deleted file mode 100644 index e60d866a..00000000 --- a/src/app/modules/admin/dashboards/project/project.component.html +++ /dev/null @@ -1,734 +0,0 @@ -
- - -
-
-
- -
-
- -
-
-
Welcome back, Brian!
-
- -
You have 2 new messages and 15 new tasks
-
-
-
- -
- - -
-
- -
-
-
{{selectedProject}}
-
-
- - - - - - - -
-
-
-
- - -
-
- - - - - - - -
- -
-
-
Summary
-
- - - - - - -
-
-
-
21
-
Due Tasks
-
-
Completed:
-
13
-
-
-
- -
-
-
Overdue
-
- - - - - - -
-
-
-
17
-
Tasks
-
-
From yesterday:
-
9
-
-
-
- -
-
-
Issues
-
- - - - - - -
-
-
-
24
-
Open
-
-
Closed today:
-
19
-
-
-
- -
-
-
Features
-
- - - - - - -
-
-
-
38
-
Proposals
-
-
Implemented:
-
16
-
-
-
- -
-
-
Github Issues Summary
-
- - Last Week - This Week - -
-
-
- -
-
New vs. Closed
-
- -
-
- -
-
Overview
-
- -
-
- {{data.githubIssues.overview[githubIssuesWeekSelector.value]['new-issues']}} -
-
New Issues
-
- -
-
- {{data.githubIssues.overview[githubIssuesWeekSelector.value]['closed-issues']}} -
-
Closed
-
- -
-
- {{data.githubIssues.overview[githubIssuesWeekSelector.value]['fixed']}} -
-
Fixed
-
- -
-
- {{data.githubIssues.overview[githubIssuesWeekSelector.value]['wont-fix']}} -
-
Won't Fix
-
- -
-
- {{data.githubIssues.overview[githubIssuesWeekSelector.value]['re-opened']}} -
-
Re-opened
-
- -
-
- {{data.githubIssues.overview[githubIssuesWeekSelector.value]['needs-triage']}} -
-
Needs Triage
-
-
-
-
-
- -
-
-
Task Distribution
-
- - Last Week - This Week - -
-
-
- -
-
-
-
- {{data.taskDistribution.overview[taskDistributionWeekSelector.value]['new']}} -
-
New tasks
-
-
-
- {{data.taskDistribution.overview[taskDistributionWeekSelector.value]['completed']}} -
-
Completed tasks
-
-
-
- -
-
-
Schedule
-
- - Today - Tomorrow - -
-
-
- -
-
-
{{scheduleItem.title}}
-
- -
- -
{{scheduleItem.time}}
-
-
- -
- -
{{scheduleItem.location}}
-
-
-
-
- -
-
-
-
-
-
-
- - - - -
- -
-
Budget Distribution
-
- -
-
- -
- -
-
-
Weekly Expenses
-
- - - - - - -
-
-
-
-
- {{data.weeklyExpenses.amount | currency:'USD'}} -
-
- -
- 2% - below projected -
-
-
-
- -
-
-
- -
-
-
Monthly Expenses
-
- - - - - - -
-
-
-
-
- {{data.monthlyExpenses.amount | currency:'USD'}} -
-
- -
- 4% - above projected -
-
-
-
- -
-
-
- -
-
-
Yearly Expenses
-
- - - - - - -
-
-
-
-
- {{data.yearlyExpenses.amount | currency:'USD'}} -
-
- -
- 3% - above projected -
-
-
-
- -
-
-
-
- -
-
Budget Details
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Type - - - - {{budget.type}} - - - Total Budget - - - {{budget.total | currency:'USD'}} - - - Expenses (USD) - - {{budget.expensesAmount | currency:'USD'}} - - Expenses (%) - - {{budget.expensesPercentage}}% - - Remaining (USD) - - {{budget.remainingAmount | currency:'USD'}} - - Remaining (%) - - - - - - - - - - - - - - - - - {{budget.remainingPercentage}}% - -
- -
-
-
-
-
- - - - -
- -
- -
-
- -
-
{{member.name}}
-
{{member.title}}
-
- - -
-
-
-
-
- -
- -
-
- -
diff --git a/src/app/modules/admin/dashboards/project/project.component.ts b/src/app/modules/admin/dashboards/project/project.component.ts deleted file mode 100644 index 79c5b3cb..00000000 --- a/src/app/modules/admin/dashboards/project/project.component.ts +++ /dev/null @@ -1,448 +0,0 @@ -import { ChangeDetectionStrategy, Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { Router } from '@angular/router'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import { ApexOptions } from 'ng-apexcharts'; -import { ProjectService } from 'app/modules/admin/dashboards/project/project.service'; - -@Component({ - selector : 'project', - templateUrl : './project.component.html', - encapsulation : ViewEncapsulation.None, - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class ProjectComponent implements OnInit, OnDestroy -{ - chartGithubIssues: ApexOptions = {}; - chartTaskDistribution: ApexOptions = {}; - chartBudgetDistribution: ApexOptions = {}; - chartWeeklyExpenses: ApexOptions = {}; - chartMonthlyExpenses: ApexOptions = {}; - chartYearlyExpenses: ApexOptions = {}; - data: any; - selectedProject: string = 'ACME Corp. Backend App'; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor( - private _projectService: ProjectService, - private _router: Router - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Get the data - this._projectService.data$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((data) => { - - // Store the data - this.data = data; - - // Prepare the chart data - this._prepareChartData(); - }); - - // Attach SVG fill fixer to all ApexCharts - window['Apex'] = { - chart: { - events: { - mounted: (chart: any, options?: any) => { - this._fixSvgFill(chart.el); - }, - updated: (chart: any, options?: any) => { - this._fixSvgFill(chart.el); - } - } - } - }; - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Private methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Fix the SVG fill references. This fix must be applied to all ApexCharts - * charts in order to fix 'black color on gradient fills on certain browsers' - * issue caused by the '' tag. - * - * Fix based on https://gist.github.com/Kamshak/c84cdc175209d1a30f711abd6a81d472 - * - * @param element - * @private - */ - private _fixSvgFill(element: Element): void - { - // Current URL - const currentURL = this._router.url; - - // 1. Find all elements with 'fill' attribute within the element - // 2. Filter out the ones that doesn't have cross reference so we only left with the ones that use the 'url(#id)' syntax - // 3. Insert the 'currentURL' at the front of the 'fill' attribute value - Array.from(element.querySelectorAll('*[fill]')) - .filter((el) => el.getAttribute('fill').indexOf('url(') !== -1) - .forEach((el) => { - const attrVal = el.getAttribute('fill'); - el.setAttribute('fill', `url(${currentURL}${attrVal.slice(attrVal.indexOf('#'))}`); - }); - } - - /** - * Prepare the chart data from the data - * - * @private - */ - private _prepareChartData(): void - { - // Github issues - this.chartGithubIssues = { - chart : { - fontFamily: 'inherit', - foreColor : 'inherit', - height : '100%', - type : 'line', - toolbar : { - show: false - }, - zoom : { - enabled: false - } - }, - colors : ['#64748B', '#94A3B8'], - dataLabels : { - enabled : true, - enabledOnSeries: [0], - background : { - borderWidth: 0 - } - }, - grid : { - borderColor: 'var(--fuse-border)' - }, - labels : this.data.githubIssues.labels, - legend : { - show: false - }, - plotOptions: { - bar: { - columnWidth: '50%' - } - }, - series : this.data.githubIssues.series, - states : { - hover: { - filter: { - type : 'darken', - value: 0.75 - } - } - }, - stroke : { - width: [3, 0] - }, - tooltip : { - followCursor: true, - theme : 'dark' - }, - xaxis : { - axisBorder: { - show: false - }, - axisTicks : { - color: 'var(--fuse-border)' - }, - labels : { - style: { - colors: 'var(--fuse-text-secondary)' - } - }, - tooltip : { - enabled: false - } - }, - yaxis : { - labels: { - offsetX: -16, - style : { - colors: 'var(--fuse-text-secondary)' - } - } - } - }; - - // Task distribution - this.chartTaskDistribution = { - chart : { - fontFamily: 'inherit', - foreColor : 'inherit', - height : '100%', - type : 'polarArea', - toolbar : { - show: false - }, - zoom : { - enabled: false - } - }, - labels : this.data.taskDistribution.labels, - legend : { - position: 'bottom' - }, - plotOptions: { - polarArea: { - spokes: { - connectorColors: 'var(--fuse-border)' - }, - rings : { - strokeColor: 'var(--fuse-border)' - } - } - }, - series : this.data.taskDistribution.series, - states : { - hover: { - filter: { - type : 'darken', - value: 0.75 - } - } - }, - stroke : { - width: 2 - }, - theme : { - monochrome: { - enabled : true, - color : '#93C5FD', - shadeIntensity: 0.75, - shadeTo : 'dark' - } - }, - tooltip : { - followCursor: true, - theme : 'dark' - }, - yaxis : { - labels: { - style: { - colors: 'var(--fuse-text-secondary)' - } - } - } - }; - - // Budget distribution - this.chartBudgetDistribution = { - chart : { - fontFamily: 'inherit', - foreColor : 'inherit', - height : '100%', - type : 'radar', - sparkline : { - enabled: true - } - }, - colors : ['#818CF8'], - dataLabels : { - enabled: true, - formatter(val: number): string | number - { - return `${val}%`; - }, - textAnchor: 'start', - style : { - fontSize : '13px', - fontWeight: 500 - }, - background: { - borderWidth: 0, - padding : 4 - }, - offsetY : -15 - }, - markers : { - strokeColors: '#818CF8', - strokeWidth : 4 - }, - plotOptions: { - radar: { - polygons: { - strokeColors : 'var(--fuse-border)', - connectorColors: 'var(--fuse-border)' - } - } - }, - series : this.data.budgetDistribution.series, - stroke : { - width: 2 - }, - tooltip : { - theme: 'dark', - y : { - formatter(val: number): string - { - return `${val}%`; - } - } - }, - xaxis : { - labels : { - show : true, - style: { - fontSize : '12px', - fontWeight: '500' - } - }, - categories: this.data.budgetDistribution.categories - }, - yaxis : { - max : (max: number) => { - return parseInt((max + 10).toFixed(0), 10); - }, - tickAmount: 7 - } - }; - - // Weekly expenses - this.chartWeeklyExpenses = { - chart : { - animations: { - enabled: false - }, - fontFamily: 'inherit', - foreColor : 'inherit', - height : '100%', - type : 'line', - sparkline : { - enabled: true - } - }, - colors : ['#22D3EE'], - series : this.data.weeklyExpenses.series, - stroke : { - curve: 'smooth' - }, - tooltip: { - theme: 'dark' - }, - xaxis : { - type : 'category', - categories: this.data.weeklyExpenses.labels - }, - yaxis : { - labels: { - formatter: (val) => { - return `$${val}`; - } - } - } - }; - - // Monthly expenses - this.chartMonthlyExpenses = { - chart : { - animations: { - enabled: false - }, - fontFamily: 'inherit', - foreColor : 'inherit', - height : '100%', - type : 'line', - sparkline : { - enabled: true - } - }, - colors : ['#4ADE80'], - series : this.data.monthlyExpenses.series, - stroke : { - curve: 'smooth' - }, - tooltip: { - theme: 'dark' - }, - xaxis : { - type : 'category', - categories: this.data.monthlyExpenses.labels - }, - yaxis : { - labels: { - formatter: (val) => { - return `$${val}`; - } - } - } - }; - - // Yearly expenses - this.chartYearlyExpenses = { - chart : { - animations: { - enabled: false - }, - fontFamily: 'inherit', - foreColor : 'inherit', - height : '100%', - type : 'line', - sparkline : { - enabled: true - } - }, - colors : ['#FB7185'], - series : this.data.yearlyExpenses.series, - stroke : { - curve: 'smooth' - }, - tooltip: { - theme: 'dark' - }, - xaxis : { - type : 'category', - categories: this.data.yearlyExpenses.labels - }, - yaxis : { - labels: { - formatter: (val) => { - return `$${val}`; - } - } - } - }; - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Track by function for ngFor loops - * - * @param index - * @param item - */ - trackByFn(index: number, item: any): any - { - return item.id || index; - } -} diff --git a/src/app/modules/admin/dashboards/project/project.module.ts b/src/app/modules/admin/dashboards/project/project.module.ts deleted file mode 100644 index 156bfd93..00000000 --- a/src/app/modules/admin/dashboards/project/project.module.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { MatButtonModule } from '@angular/material/button'; -import { MatButtonToggleModule } from '@angular/material/button-toggle'; -import { MatDividerModule } from '@angular/material/divider'; -import { MatIconModule } from '@angular/material/icon'; -import { MatMenuModule } from '@angular/material/menu'; -import { MatProgressBarModule } from '@angular/material/progress-bar'; -import { MatSidenavModule } from '@angular/material/sidenav'; -import { MatSortModule } from '@angular/material/sort'; -import { MatTableModule } from '@angular/material/table'; -import { MatTabsModule } from '@angular/material/tabs'; -import { NgApexchartsModule } from 'ng-apexcharts'; -import { SharedModule } from 'app/shared/shared.module'; -import { ProjectComponent } from 'app/modules/admin/dashboards/project/project.component'; -import { projectRoutes } from 'app/modules/admin/dashboards/project/project.routing'; - -@NgModule({ - declarations: [ - ProjectComponent - ], - imports : [ - RouterModule.forChild(projectRoutes), - MatButtonModule, - MatButtonToggleModule, - MatDividerModule, - MatIconModule, - MatMenuModule, - MatProgressBarModule, - MatSidenavModule, - MatSortModule, - MatTableModule, - MatTabsModule, - NgApexchartsModule, - SharedModule - ] -}) -export class ProjectModule -{ -} diff --git a/src/app/modules/admin/dashboards/project/project.resolvers.ts b/src/app/modules/admin/dashboards/project/project.resolvers.ts deleted file mode 100644 index e9203673..00000000 --- a/src/app/modules/admin/dashboards/project/project.resolvers.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { Injectable } from '@angular/core'; -import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router'; -import { Observable } from 'rxjs'; -import { ProjectService } from 'app/modules/admin/dashboards/project/project.service'; - -@Injectable({ - providedIn: 'root' -}) -export class ProjectResolver implements Resolve -{ - /** - * Constructor - */ - constructor(private _projectService: ProjectService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Resolver - * - * @param route - * @param state - */ - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable - { - return this._projectService.getData(); - } -} diff --git a/src/app/modules/admin/dashboards/project/project.routing.ts b/src/app/modules/admin/dashboards/project/project.routing.ts deleted file mode 100644 index 21bfd12b..00000000 --- a/src/app/modules/admin/dashboards/project/project.routing.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Route } from '@angular/router'; -import { ProjectComponent } from 'app/modules/admin/dashboards/project/project.component'; -import { ProjectResolver } from 'app/modules/admin/dashboards/project/project.resolvers'; - -export const projectRoutes: Route[] = [ - { - path : '', - component: ProjectComponent, - resolve : { - data: ProjectResolver - } - } -]; diff --git a/src/app/modules/admin/dashboards/project/project.service.ts b/src/app/modules/admin/dashboards/project/project.service.ts deleted file mode 100644 index 3cec81cc..00000000 --- a/src/app/modules/admin/dashboards/project/project.service.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient } from '@angular/common/http'; -import { BehaviorSubject, Observable } from 'rxjs'; -import { tap } from 'rxjs/operators'; - -@Injectable({ - providedIn: 'root' -}) -export class ProjectService -{ - private _data: BehaviorSubject = new BehaviorSubject(null); - - /** - * Constructor - */ - constructor(private _httpClient: HttpClient) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Accessors - // ----------------------------------------------------------------------------------------------------- - - /** - * Getter for data - */ - get data$(): Observable - { - return this._data.asObservable(); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Get data - */ - getData(): Observable - { - return this._httpClient.get('api/dashboards/project').pipe( - tap((response: any) => { - this._data.next(response); - }) - ); - } -} diff --git a/src/app/modules/admin/docs/changelog/changelog.html b/src/app/modules/admin/docs/changelog/changelog.html deleted file mode 100644 index 7eaee555..00000000 --- a/src/app/modules/admin/docs/changelog/changelog.html +++ /dev/null @@ -1,41 +0,0 @@ -
- - -
-
- - - -
-

- Changelog -

-
-
-
- -
-
- -
-
-

{{item.version}}

-
{{item.releaseDate}}
-
-
-
- {{change.type}} -
    -
  • {{listItem}}
  • -
-
-
-
-
-
- -
diff --git a/src/app/modules/admin/docs/changelog/changelog.module.ts b/src/app/modules/admin/docs/changelog/changelog.module.ts deleted file mode 100644 index eea49c4a..00000000 --- a/src/app/modules/admin/docs/changelog/changelog.module.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { SharedModule } from 'app/shared/shared.module'; -import { ChangelogComponent } from 'app/modules/admin/docs/changelog/changelog'; -import { changelogRoutes } from 'app/modules/admin/docs/changelog/changelog.routing'; - -@NgModule({ - declarations: [ - ChangelogComponent - ], - imports : [ - RouterModule.forChild(changelogRoutes), - SharedModule - ] -}) -export class ChangelogModule -{ -} diff --git a/src/app/modules/admin/docs/changelog/changelog.routing.ts b/src/app/modules/admin/docs/changelog/changelog.routing.ts deleted file mode 100644 index 9f35d8c5..00000000 --- a/src/app/modules/admin/docs/changelog/changelog.routing.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Route } from '@angular/router'; -import { ChangelogComponent } from 'app/modules/admin/docs/changelog/changelog'; - -export const changelogRoutes: Route[] = [ - { - path : '', - component: ChangelogComponent - } -]; diff --git a/src/app/modules/admin/docs/changelog/changelog.ts b/src/app/modules/admin/docs/changelog/changelog.ts deleted file mode 100644 index 35b6613f..00000000 --- a/src/app/modules/admin/docs/changelog/changelog.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { ChangeDetectionStrategy, Component } from '@angular/core'; - -@Component({ - selector : 'changelog', - templateUrl : './changelog.html', - styles : [''], - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class ChangelogComponent -{ - changelog: any[] = [ - - // v12.0.0 - { - version : 'v12.0.0', - releaseDate: 'April 16, 2021', - changes : [ - { - type: 'Breaking Changes', - list: [ - 'This is the new major version of the Fuse and it\'s completely different from previous versions with no upgrade path', - 'This version requires a clean installation' - ] - }, - { - type: 'Features', - list: [ - 'Improved the look and feel', - 'Re-wrote the entire template from scratch using Tailwind', - 'Removed 99% of the SCSS styles in favor of Tailwind', - 'Integrated Angular Material theming with Tailwind' - ] - } - ] - } - ]; - - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/docs/core-features/components/alert/alert.component.html b/src/app/modules/admin/docs/core-features/components/alert/alert.component.html deleted file mode 100644 index 472e8574..00000000 --- a/src/app/modules/admin/docs/core-features/components/alert/alert.component.html +++ /dev/null @@ -1,1207 +0,0 @@ -
- - -
-
- -
- - -
- - Components -
-
- -
-

- Alert -

-
-
- -
- -
- -

- fuse-alert is a customizable component for displaying all kinds of alerts across your app. They can be controlled from your components as well - as from the FuseAlertService. -

-

- Exported as: fuseAlert -

- -

Module

- - -

Properties

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionDefault
-
@Input()
-
name: string
-
- A unique name for the alert box to access it from FuseAlertService. - - Auto generated -
-
@Input()
-
appearance: FuseAlertAppearance
-
- Appearance of the alert box. - - soft -
-
@Input()
-
dismissed: boolean
-
- Whether the alert box is dismissed. - - false -
-
@Input()
-
dismissible: boolean
-
- Whether the alert box is dismissible. This must be true for dismissed to work. - - false -
-
@Input()
-
showIcon: boolean
-
- Whether the icon is shown. - - true -
-
@Input()
-
type: FuseAlertType
-
- The type of the alert box. - - primary -
-
@Output()
-
afterDismissed: true
-
- An event emitted after the alert box dismissed. - - - -
-
@Output()
-
afterShown: true
-
- An event emitted after the alert box shown. - - - -
-
- -

Type aliases

- - - - - -

Appearance

-

- Alert component comes with 3 different built-in appearances to choose from: -

- -
- - -
-
Soft (default)
-
- - - - - - - - - - Primary alert - Thank you for joining our newsletter - - - - - Accent alert - Your changes has been saved - - - - - Warn alert - Fill all required fields to proceed next step - - - - - Basic alert - You have 3 new notifications - - - - - Info alert - This is a alert with an 'info' level severity - - - - - Success alert - This is a alert with a 'success' level severity - - - - - Warning alert - This is a alert with a 'warning' level severity - - - - - Error alert - This is a alert with an 'error' level severity - - - - - - - - - - - - - - - - -
- -
- - -
-
Outline
-
- - - - - - - - - - Primary alert - Thank you for joining our newsletter - - - - - Accent alert - Your changes has been saved - - - - - Warn alert - Fill all required fields to proceed next step - - - - - Basic alert - You have 3 new notifications - - - - - Info alert - This is a alert with an 'info' level severity - - - - - Success alert - This is a alert with a 'success' level severity - - - - - Warning alert - This is a alert with a 'warning' level severity - - - - - Error alert - This is a alert with an 'error' level severity - - - - - - - - - - - - - - - - -
- -
- - -
-
Fill
-
- - - - - - - - - - Primary alert - Thank you for joining our newsletter - - - - - Accent alert - Your changes has been saved - - - - - Warn alert - Fill all required fields to proceed next step - - - - - Basic alert - You have 3 new notifications - - - - - Info alert - This is a alert with an 'info' level severity - - - - - Success alert - This is a alert with a 'success' level severity - - - - - Warning alert - This is a alert with a 'warning' level severity - - - - - Error alert - This is a alert with an 'error' level severity - - - - - - - - - - - - - - - - -
- -
- - -
-
Border
-
- - - - - - - - - - Primary alert - Thank you for joining our newsletter - - - - - Accent alert - Your changes has been saved - - - - - Warn alert - Fill all required fields to proceed next step - - - - - Basic alert - You have 3 new notifications - - - - - Info alert - This is a alert with an 'info' level severity - - - - - Success alert - This is a alert with a 'success' level severity - - - - - Warning alert - This is a alert with a 'warning' level severity - - - - - Error alert - This is a alert with an 'error' level severity - - - - - - - - - - - - - - - - -
- -

Title and alert

-

- All alert boxes have title and alert content that can be customized. -

- -
- -
-
Example
-
- - - - - - - - - Alert title - This is the alert content - - - - Alert title without any content - - - - Simple alert without a title - - - - - - - - - - - - - - - - -
- -

Icons

-

- The info, success, warning and error type alert boxes have default icons and they are visible - by default. If you wish to hide those icons, use the [showIcon]="false" input. -

- -
- -
-
Example
-
- - - - - - - - - Success alert with no icon - - - - - - - - - - - - - - - - -
- -

Custom icons

-

- All alert boxes come with custom icon support. To use a custom icon, simply use fuseAlertIcon attribute on an element you wish to use as the icon. - If there is a default icon for the alert box, custom icon will override it. -

- -
- -
-
Example
-
- - - - - - - - - - Info alert with a custom icon - - - - - - - - - - - - - - - - -
- -

Dismissible alerts

-

- Dismissible alerts can be removed from the view by clicking their dismiss (x) button. In order to get the dismiss button visible, the - [dismissed] input must be explicitly set either to true or false. Setting the [dismissed] input to - null or simply removing it from the element will remove the dismiss button. -

- -
- -
-
Example
- -
- - - - - - - - - Your subscription model is successfully upgraded to the Lifetime Pro. - - - - This one has a lot of text so you can see how the text is going to be displayed. Also this is a dismissible alert box which can be dismissed by - clicking the dismiss button. - - - - - - - - - - - - - - - - -
- -

Dismissible alerts controlled from the service

-

- Alerts can be shown and dismissed via FuseAlertService. -

- -
- -
-
Example
-
- - - - - - - - - - - - - Your subscription model is successfully upgraded to the Lifetime Pro. - - - - This one has a lot of text so you can see how the text is going to be displayed. Also this is a dismissible alert box which can be dismissed by - clicking the close button. - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
diff --git a/src/app/modules/admin/docs/core-features/components/alert/alert.component.ts b/src/app/modules/admin/docs/core-features/components/alert/alert.component.ts deleted file mode 100644 index ca61ba1a..00000000 --- a/src/app/modules/admin/docs/core-features/components/alert/alert.component.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { Component } from '@angular/core'; -import { FuseAlertService } from '@fuse/components/alert'; -import { CoreFeaturesComponent } from 'app/modules/admin/docs/core-features/core-features.component'; - -@Component({ - selector : 'alert', - templateUrl: './alert.component.html', - styles : [ - ` - fuse-alert { - margin: 16px 0; - } - ` - ] -}) -export class AlertComponent -{ - /** - * Constructor - */ - constructor( - private _fuseAlertService: FuseAlertService, - private _coreFeaturesComponent: CoreFeaturesComponent - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Dismiss the alert via the service - * - * @param name - */ - dismiss(name: string): void - { - // Dismiss - this._fuseAlertService.dismiss(name); - } - - /** - * Show the alert via the service - * - * @param name - */ - show(name: string): void - { - // Show - this._fuseAlertService.show(name); - } - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._coreFeaturesComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/core-features/components/card/card.component.html b/src/app/modules/admin/docs/core-features/components/card/card.component.html deleted file mode 100644 index c6ec3ab3..00000000 --- a/src/app/modules/admin/docs/core-features/components/card/card.component.html +++ /dev/null @@ -1,413 +0,0 @@ -
- - -
-
- -
- - -
- - Components -
-
- -
-

- Card -

-
-
- -
- -
- -

- fuse-card is a basic card component to show any kind of information or content with features like flipping and expanding. -

-

- Exported as: fuseCard -

- -

Module

- - -

Properties

-
- - - - - - - - - - - - - - - -
NameDescriptionDefault
-
@Input()
-
flippable: boolean
-
- Whether the card is flippable. - - false -
-
- -

Methods

-
-
- expand(): void -
-
- Expands the expansion of the card. -
-
-
-
- collapse(): void -
-
- Collapses the expansion of the card. -
-
-
-
- toggleExpanded(): void -
-
- Toggles the expanded status of the expansion. -
-
-
-
- flip(): void -
-
- Flip the card. -
-
- -

Usage

-

- Just wrap the content or the information with fuse-card to show them within the card. fuse-card doesn't apply any kind of style to its - content to make customization simpler: -

- -
- -
-
Example
-
- - - - - - - -
-
- - This content is in the card and it doesn't have any style applied to it! - -
-
- -
- -
- - - - - - - - - -
- -
- -

Expandable

-

- Expandable fuse-card holds an extra content or information hidden in its expandable area which can be toggled by accessing the component itself - via a template reference: -

- -
- -
-
Example
-
- - - - - - - -
-
- - -
Title of the card
-
- A paragraph, an image, a form or simply anything can go here to create the content of the card. -
-
- -
- - - -
- This is the expansion and holds an extra information! -
-
-
- -
-
- -
- -
- - - - - - - - - -
- -
- -

Flippable

-

- Flippable card holds content or information on both sides and can be flipped by accessing the component itself via a template reference. The only limitation with - this type of cards is that the back of the card will share the same height as the front of the card. If the back side has more content, - scrollbar will appear. -

- -
- -
-
Example
-
- - - - - - - -
-
- - - - -
-
Title of the card
-
- A paragraph, an image, a form or simply anything can go here to create the content of the card. -
-
- -
-
-
- - - -
-
- -
-

- This is the back of the card and holds an extra information! -

-

- Also, the back side of the card holds more information than the front of the card which causes scrollbars to - appear. -

-
-
-
- -
-
- -
- -
- - - - - - - - - -
- -
- -
- -
diff --git a/src/app/modules/admin/docs/core-features/components/card/card.component.ts b/src/app/modules/admin/docs/core-features/components/card/card.component.ts deleted file mode 100644 index 710b0b84..00000000 --- a/src/app/modules/admin/docs/core-features/components/card/card.component.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from '@angular/core'; -import { CoreFeaturesComponent } from 'app/modules/admin/docs/core-features/core-features.component'; - -@Component({ - selector : 'card', - templateUrl: './card.component.html', - styles : [''] -}) -export class CardComponent -{ - /** - * Constructor - */ - constructor(private _coreFeaturesComponent: CoreFeaturesComponent) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._coreFeaturesComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/core-features/components/date-range/date-range.component.html b/src/app/modules/admin/docs/core-features/components/date-range/date-range.component.html deleted file mode 100644 index a4c4fbc7..00000000 --- a/src/app/modules/admin/docs/core-features/components/date-range/date-range.component.html +++ /dev/null @@ -1,171 +0,0 @@ -
- - -
-
- -
- - -
- - Components -
-
- -
-

- Date Range -

-
-
- -
- -
- -

- fuse-date-range is a date-time range selector component. It can be programmed to provide date or date-time ranges. It has full - ngModel and reactive form support and built to works with moment.js. -

-

- Exported as: fuseDateRange -

- -

Module

- - - - -

Usage

-

- Here's the basic usage of the fuse-date-range: -

- - - - -

Properties

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionDefault
-
@Input()
-
dateFormat: string
-
- Moment.js date format string to format output date. - - DD/MM/YYYY -
-
@Input()
-
timeFormat: string
-
- 12 for 12-hour, 24 for 24-hour format. - - 12 -
-
@Input()
-
timeRange: boolean
-
- Whether to enable time range. - - true -
-
@Input()
-
range: any
-
- Date range input {{'{'}} start: string, end: string {{'}'}}. If you are using ngModel or Reactive - forms, you shouldn't use this input! - - true -
-
- -

Range

-

- The input of the range must be in the following format. The start and end date strings must be moment compatible strings as they - will be immediately parsed with MomentJS. - -

- - - -

- The outputted range object will be in the following format. The date and time fields will be formatted based on the - dateFormat and timeFormat inputs. -

- - - - -
- -
diff --git a/src/app/modules/admin/docs/core-features/components/date-range/date-range.component.ts b/src/app/modules/admin/docs/core-features/components/date-range/date-range.component.ts deleted file mode 100644 index c867db66..00000000 --- a/src/app/modules/admin/docs/core-features/components/date-range/date-range.component.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from '@angular/core'; -import { CoreFeaturesComponent } from 'app/modules/admin/docs/core-features/core-features.component'; - -@Component({ - selector : 'date-range', - templateUrl: './date-range.component.html', - styles : [''] -}) -export class DateRangeComponent -{ - /** - * Constructor - */ - constructor(private _coreFeaturesComponent: CoreFeaturesComponent) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._coreFeaturesComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/core-features/components/drawer/drawer.component.html b/src/app/modules/admin/docs/core-features/components/drawer/drawer.component.html deleted file mode 100644 index 79033040..00000000 --- a/src/app/modules/admin/docs/core-features/components/drawer/drawer.component.html +++ /dev/null @@ -1,358 +0,0 @@ -
- - -
-
- -
- - -
- - Components -
-
- -
-

- Drawer -

-
-
- -
- -
- -

- fuse-drawer is a simple drawer component that can be programmed in various ways. The main difference between Angular Material's - mat-drawer component is that the fuse-drawer can be placed anywhere on the DOM and it doesn't have to wrap the content like - mat-drawer. -

- - Since fuse-drawer works with absolute positioning by default, the parent of the drawer must have - position: relative and overflow-x: hidden properties otherwise the drawer won't be able to work correctly. - -

- Exported as: fuseDrawer -

- -

Module

- - -

Usage

-

- Here's the basic usage of the fuse-drawer: -

- - - - -

Properties

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionDefault
-
@Input()
-
fixed: boolean
-
- Whether the position of the drawer is fixed or absolute. - - false -
-
@Input()
-
mode: FuseDrawerMode
-
- over mode can be used to place the drawer on top of the content and side mode can be used to push the content and - place the drawer next to it. - - side -
-
REQUIRED
-
@Input()
-
name: string
-
- Unique name of the drawer. Required for drawer to work correctly. - - - -
-
@Input()
-
opened: boolean
-
- Whether the drawer is opened. Only works with over mode. - - false -
-
@Input()
-
position: FuseDrawerPosition
-
- Position of the drawer. - - left -
-
@Input()
-
transparentOverlay: boolean
-
- Whether the overlay of the drawer is transparent. Only works with over mode. - - false -
-
@Output()
-
modeChanged: FuseNavigationMode
-
- An event emitted after the mode of the navigation changed. - - - -
-
@Output()
-
openedChanged: boolean
-
- An event emitted after the opened status of the drawer changed. - - - -
-
@Output()
-
positionChanged: FuseNavigationPosition
-
- An event emitted after the position of the drawer changed. - - - -
-
- -

Type aliases

- - - - - -

Service

-

- The FuseDrawerService can be used to remotely accessing to drawers using their name properties to control them: -

-
- -
-
Example
-
- - - - - - - - - - - -
- - -
- Left drawer -
Current mode: {{drawer.mode}}
-
-
- -
- Some content -
- -
- -
- -
- - - - - - - - - - - - - - - - - -
- -
- -
- -
diff --git a/src/app/modules/admin/docs/core-features/components/drawer/drawer.component.ts b/src/app/modules/admin/docs/core-features/components/drawer/drawer.component.ts deleted file mode 100644 index c9797d52..00000000 --- a/src/app/modules/admin/docs/core-features/components/drawer/drawer.component.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { Component } from '@angular/core'; -import { FuseDrawerMode, FuseDrawerService } from '@fuse/components/drawer'; -import { CoreFeaturesComponent } from 'app/modules/admin/docs/core-features/core-features.component'; - -@Component({ - selector : 'drawer', - templateUrl: './drawer.component.html', - styles : [''] -}) -export class DrawerComponent -{ - drawerMode: FuseDrawerMode; - - /** - * Constructor - */ - constructor( - private _fuseDrawerService: FuseDrawerService, - private _coreFeaturesComponent: CoreFeaturesComponent - ) - { - // Set the defaults - this.drawerMode = 'side'; - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle the drawer mode - * - * @param name - */ - toggleDrawerMode(name: string): void - { - const drawer = this._fuseDrawerService.getComponent(name); - - if ( drawer ) - { - drawer.mode = drawer.mode === 'side' ? 'over' : 'side'; - } - } - - /** - * Toggle the drawer open - * - * @param name - */ - toggleDrawerOpen(name: string): void - { - const drawer = this._fuseDrawerService.getComponent(name); - - if ( drawer ) - { - drawer.toggle(); - } - } - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._coreFeaturesComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/core-features/components/highlight/highlight.component.html b/src/app/modules/admin/docs/core-features/components/highlight/highlight.component.html deleted file mode 100644 index 957a7bb9..00000000 --- a/src/app/modules/admin/docs/core-features/components/highlight/highlight.component.html +++ /dev/null @@ -1,144 +0,0 @@ -
- - -
-
- -
- - -
- - Components -
-
- -
-

- Highlight -

-
-
- -
- -
- -

- fuse-highlight is a syntax highlighter component to display syntax highlighted codes within the content. Internally, it uses highlight.js. -

-

- Exported as: fuseHighlight -

- -

Module

- - -

Usage

-

- Here's the basic usage of the fuse-highlight: -

- - - -

- fuse-highlight doesn't have its own selector and cannot be used like any other components. It must be used with a <textarea>. -

-

- The main reason of this is that the Angular parses the templates before binding and running components. Because of this mechanic, anything you place into templates - will be taken as a literal content and parsed by Angular. Only the contents of a <textarea> can be preserved as is. -

- -

Properties

-
- - - - - - - - - - - - - - - - - - - - -
NameDescriptionDefault
-
@Input()
-
code: string
-
- Piece of code to highlight. If code input is not provided, the actual content of the textarea will be used. - - - -
-
@Input()
-
lang: string
-
- Which language to highlight the code. See: - https://highlightjs.org/usage/ - - for full list of supported languages. - - - -
-
- -

Service

-

- The FuseHighlightService can also be used to format and highlight code: -

- - - - -
- -
diff --git a/src/app/modules/admin/docs/core-features/components/highlight/highlight.component.ts b/src/app/modules/admin/docs/core-features/components/highlight/highlight.component.ts deleted file mode 100644 index 990baa47..00000000 --- a/src/app/modules/admin/docs/core-features/components/highlight/highlight.component.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from '@angular/core'; -import { CoreFeaturesComponent } from 'app/modules/admin/docs/core-features/core-features.component'; - -@Component({ - selector : 'highlight', - templateUrl: './highlight.component.html', - styles : [''] -}) -export class HighlightComponent -{ - /** - * Constructor - */ - constructor(private _coreFeaturesComponent: CoreFeaturesComponent) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._coreFeaturesComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/core-features/components/navigation/navigation.component.html b/src/app/modules/admin/docs/core-features/components/navigation/navigation.component.html deleted file mode 100644 index 23abf861..00000000 --- a/src/app/modules/admin/docs/core-features/components/navigation/navigation.component.html +++ /dev/null @@ -1,1022 +0,0 @@ -
- - -
-
- -
- - -
- - Components -
-
- -
-

- Navigation -

-
-
- -
- -
- -

- fuse-navigation is a set of components for creating navigations from data. It has two different variations; fuse-vertical-navigation - for creating vertical and fuse-horizontal-navigation for creating horizontal navigations. -

-

- The vertical navigation comes with built-in drawer that can be programmed in various ways to show the navigation in different styles and to control the - mobile behavior. -

-

- fuse-navigation also provides a service which can be used to store navigation data as well as accessing navigation items with their ids from the - navigation data. It's a utility service, you don't have to use it to make fuse-navigation work. -

-

- Exported as: fuseVerticalNavigation and fuseHorizontalNavigation -

- - - fuse-navigation designed to work with data and it must be supplied in certain format. If you want to create a navigation from an HTML structure, - this component is not for you. - - -

Module

- - - - -

Navigation item

-

- This is the type alias for the Navigation item. It's used to create the navigation and both vertical and horizontal variations use the - same item type: -

- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription
-
id
-
- Unique id of the navigation item. It's important to supply navigation items with ids if you want to access and modify them after generating the - navigation. -
-
title
-
- Title of the navigation item. -
-
subtitle
-
- Subtitle of the navigation item. -
-
type
-
- Type of the navigation item. -
-
hidden
-
- A function that returns a boolean. It gets one parameter which is the navigation item. Returning true from the function will hide the - item and false will show it. -
-
active
-
- Whether to force the navigation item to be active. -
-
disabled
-
- Whether the navigation item is disabled. -
-
link
-
- String representation of the item link. It can be either a router link or a normal, outgoing link. -
-
externalLink
-
- Whether the supplied link should be parsed as an external link. It must be true if you supply a normal, outgoing link in the - link property. -
-
exactMatch
-
- Sets the exactMatch parameter on the router link active options. -
-
function
-
- A function to run on navigation item click. It gets one parameter which is the navigation item. Supplying function will NOT - override the link functionality of the navigation item, they will run in parallel. -
-
classes
-
- Custom class names for the navigation item's specific parts. Multiple class names can be added by separating them with whitespace: - 'class1 class2 class3' -
-
icon
-
- Icon name for the navigation item. -
-
badge.title
-
- Title of the badge. -
-
badge.classes
-
- Classes to add to the badge. This can be used to customize the look of the badge. -
-
children
-
- Array of navigation items to create child items. -
-
meta
-
- An object to hold custom data for the navigation item. It can be used for anything such as storing the access role and authorization of the - navigation item. -
-
- -

Vertical navigation

-

Usage

-

- Here's the basic usage of the fuse-vertical-navigation: -

- - - - -

Properties

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionDefault
-
@Input()
-
appearance: FuseVerticalNavigationAppearance
-
- Appearance of the navigation and its drawer. This is a string type and can be used to override the style of the navigation. - - classic -
-
@Input()
-
autoCollapse: boolean
-
- Whether expanding an expandable navigation item should close other expanded items excluding the active menu item's parent. - - true -
-
@Input()
-
inner: boolean
-
- Whether the inner mode is active. This mode allows using navigation without its drawer. Suitable for using it inside mat-sidenav - or mat-drawer. - - false -
-
@Input()
-
mode: FuseVerticalNavigationMode
-
- over mode can be used to place the drawer on top of the content and side mode can be used to push the content and - place the drawer next to it. - - side -
-
REQUIRED
-
@Input()
-
name: string
-
- Unique name of the navigation. Required for navigation and its drawer to work correctly. - - - -
-
@Input()
-
navigation: FuseNavigationItem[]
-
- Array of navigation items to build the navigation from. - - - -
-
@Input()
-
opened: boolean
-
- Whether the navigation drawer is opened. Only works with over mode. - - false -
-
@Input()
-
position: FuseVerticalNavigationPosition
-
- Position of the drawer. - - left -
-
@Input()
-
transparentOverlay: boolean
-
- Whether the overlay of the drawer is transparent. Only works with over mode. - - false -
-
@Output()
-
appearanceChanged: FuseVerticalNavigationAppearance
-
- An event emitted after the appearance of the navigation changed. - - - -
-
@Output()
-
modeChanged: FuseVerticalNavigationMode
-
- An event emitted after the mode of the navigation changed. - - - -
-
@Output()
-
openedChanged: boolean
-
- An event emitted after the opened status of the navigation changed. - - - -
-
@Output()
-
positionChanged: FuseVerticalNavigationPosition
-
- An event emitted after the position of the navigation changed. - - - -
-
- -

Custom content hooks

-

- Since the entire navigation will be created from the supplied navigation data, it's only possible to attach custom content inside the navigation drawer using custom - content hooks. There are four of these hooks; -

-
- - - - - - - - - - - - - - - - - - - - - - - - - -
HookDescription
-
fuseVerticalNavigationHeader
-
- Fixed header hook. Anything put inside this hook will not scroll with drawer content. -
-
fuseVerticalNavigationContentHeader
-
- Header hook. Anything put inside this hook will be scrolled with the drawer content. -
-
fuseVerticalNavigationFooter
-
- Fixed footer hook. Anything put inside this hook will not scroll with drawer content. -
-
fuseVerticalNavigationContentFooter
-
- Footer hook. Anything put inside this hook will be scrolled with the drawer content. -
-
- - - - -

Type aliases

- - - - - - -

Horizontal navigation

-

Usage

-

- Here's the basic usage of the fuse-horizontal-navigation: -

- - - - -

Properties

-
- - - - - - - - - - - - - - - - - - - - -
NameDescriptionDefault
-
REQUIRED
-
@Input()
-
name: string
-
- Unique name of the navigation. Required for navigation and its drawer to work correctly. - - - -
-
@Input()
-
navigation: FuseNavigationItem[]
-
- Array of navigation items to build the navigation from. - - - -
-
- -

Accessing navigation items

-

- The FuseNavigationService provides couple helper methods to access navigation items from the navigation data using their ids. This is especially useful - if you want to change something from any item like updating its badge title, hiding or disabling it. -

-
- -
-
Example
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -

Modifying navigation items

-

- After accessing a navigation item, you can simply modify the object and then call the refresh() method on the Navigation component to - apply the changes. -

-
- -
-
Change badge title
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-
Disable/Enable navigation item
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -

Swapping entire navigation

-

- Sometimes it's best to use more than one set of data and swap between them to provide correct navigation. An example use case would be user roles. Different roles - may require access to different areas and rather than showing/hiding individual navigation items, it's best to swap the entire navigation data to show a - personalized navigation for that role. -

-
- -
-
Swap the entire navigation data
-
- - - - - - - - - Reload the page to load the default navigation! - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
diff --git a/src/app/modules/admin/docs/core-features/components/navigation/navigation.component.ts b/src/app/modules/admin/docs/core-features/components/navigation/navigation.component.ts deleted file mode 100644 index e8cda489..00000000 --- a/src/app/modules/admin/docs/core-features/components/navigation/navigation.component.ts +++ /dev/null @@ -1,185 +0,0 @@ -import { Component } from '@angular/core'; -import { FuseNavigationItem, FuseNavigationService } from '@fuse/components/navigation'; -import { CoreFeaturesComponent } from 'app/modules/admin/docs/core-features/core-features.component'; - -@Component({ - selector : 'navigation', - templateUrl: './navigation.component.html', - styles : [''] -}) -export class NavigationComponent -{ - /** - * Constructor - */ - constructor( - private _fuseNavigationService: FuseNavigationService, - private _coreFeaturesComponent: CoreFeaturesComponent - ) - { - - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Get navigation item - * - * @param itemId - * @param navigationName - */ - getNavItem(itemId, navigationName): FuseNavigationItem | null - { - // Get the component -> navigation mock-api -> item - const navComponent = this._fuseNavigationService.getComponent(navigationName); - - // Return if the navigation component does not exist - if ( !navComponent ) - { - return null; - } - - // Get the navigation item - const navigation = navComponent.navigation; - const item = this._fuseNavigationService.getItem(itemId, navigation); - console.log(item); - return item; - } - - /** - * Update badge title - * - * @param itemId - * @param navigationName - * @param title - */ - updateBadgeTitle(itemId, navigationName, title): void - { - // Get the component -> navigation mock-api -> item - const navComponent = this._fuseNavigationService.getComponent(navigationName); - - // Return if the navigation component does not exist - if ( !navComponent ) - { - return null; - } - - // Get the navigation item, update the badge and refresh the component - const navigation = navComponent.navigation; - const item = this._fuseNavigationService.getItem(itemId, navigation); - item.badge.title = title; - navComponent.refresh(); - } - - /** - * Toggle disabled status - * - * @param itemId - * @param navigationName - */ - toggleDisabled(itemId, navigationName): void - { - // Get the component -> navigation mock-api -> item - const navComponent = this._fuseNavigationService.getComponent(navigationName); - - // Return if the navigation component does not exist - if ( !navComponent ) - { - return null; - } - - // Get the navigation item, update the badge and refresh the component - const navigation = navComponent.navigation; - const item = this._fuseNavigationService.getItem(itemId, navigation); - item.disabled = !item.disabled; - navComponent.refresh(); - } - - /** - * Swap navigation mock-api - * - * @param navigationName - */ - swapNavigationData(navigationName): void - { - // Get the component -> navigation mock-api -> item - const navComponent = this._fuseNavigationService.getComponent(navigationName); - - // Return if the navigation component does not exist - if ( !navComponent ) - { - return null; - } - - // A navigation mock-api to replace with - const newNavigation = [ - { - id : 'supported-components', - title : 'Supported components', - subtitle: 'Compatible third party components', - type : 'group', - icon : 'memory', - children: [ - { - id : 'supported-components.apex-charts', - title: 'ApexCharts', - type : 'basic', - icon : 'insert_chart', - link : '/supported-components/apex-charts' - }, - { - id : 'supported-components.full-calendar', - title: 'FullCalendar', - type : 'basic', - icon : 'today', - link : '/supported-components/full-calendar' - }, - { - id : 'supported-components.google-maps', - title: 'Google Maps', - type : 'basic', - icon : 'map', - link : '/supported-components/google-maps' - }, - { - id : 'supported-components.ngx-markdown', - title: 'ngx-markdown', - type : 'basic', - icon : 'text_format', - link : '/supported-components/ngx-markdown' - }, - { - id : 'supported-components.quill-editor', - title: 'Quill editor', - type : 'basic', - icon : 'font_download', - link : '/supported-components/quill-editor' - }, - { - id : 'supported-components.youtube-player', - title: 'Youtube player', - type : 'basic', - icon : 'play_circle_filled', - link : '/supported-components/youtube-player' - } - ] - } - ]; - - // Replace the navigation mock-api - navComponent.navigation = newNavigation; - navComponent.refresh(); - } - - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._coreFeaturesComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/core-features/core-features.component.html b/src/app/modules/admin/docs/core-features/core-features.component.html deleted file mode 100644 index d0fc3ab1..00000000 --- a/src/app/modules/admin/docs/core-features/core-features.component.html +++ /dev/null @@ -1,36 +0,0 @@ -
- - - - - - - - - - - - -
- -
- -
- -
- -
- - diff --git a/src/app/modules/admin/docs/core-features/core-features.component.scss b/src/app/modules/admin/docs/core-features/core-features.component.scss deleted file mode 100644 index 95a51f33..00000000 --- a/src/app/modules/admin/docs/core-features/core-features.component.scss +++ /dev/null @@ -1,9 +0,0 @@ -core-features { - - fuse-vertical-navigation { - - .fuse-vertical-navigation-wrapper { - box-shadow: none !important; - } - } -} diff --git a/src/app/modules/admin/docs/core-features/core-features.component.ts b/src/app/modules/admin/docs/core-features/core-features.component.ts deleted file mode 100644 index 23637cec..00000000 --- a/src/app/modules/admin/docs/core-features/core-features.component.ts +++ /dev/null @@ -1,207 +0,0 @@ -import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; -import { FuseNavigationItem } from '@fuse/components/navigation'; -import { MatDrawer } from '@angular/material/sidenav'; -import { Subject } from 'rxjs'; -import { FuseMediaWatcherService } from '@fuse/services/media-watcher'; -import { takeUntil } from 'rxjs/operators'; - -@Component({ - selector : 'core-features', - templateUrl : './core-features.component.html', - styleUrls : ['./core-features.component.scss'], - encapsulation : ViewEncapsulation.None, - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class CoreFeaturesComponent implements OnInit, OnDestroy -{ - @ViewChild('matDrawer', {static: true}) matDrawer: MatDrawer; - drawerMode: 'side' | 'over'; - drawerOpened: boolean; - menuData: FuseNavigationItem[]; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor( - private _changeDetectorRef: ChangeDetectorRef, - private _fuseMediaWatcherService: FuseMediaWatcherService - ) - { - this.menuData = [ - { - id : 'core-features.libraries', - title : 'Libraries', - type : 'group', - children: [ - { - id : 'core-features.libraries.mock-api', - title: 'MockAPI', - type : 'basic', - link : '/docs/core-features/libraries/mock-api' - } - ] - }, - { - id : 'core-features.components', - title : 'Components', - type : 'group', - children: [ - { - id : 'core-features.components.alert', - title: 'Alert', - type : 'basic', - link : '/docs/core-features/components/alert' - }, - { - id : 'core-features.components.card', - title: 'Card', - type : 'basic', - link : '/docs/core-features/components/card' - }, - { - id : 'core-features.components.date-range', - title: 'DateRange', - type : 'basic', - link : '/docs/core-features/components/date-range' - }, - { - id : 'core-features.components.drawer', - title: 'Drawer', - type : 'basic', - link : '/docs/core-features/components/drawer' - }, - { - id : 'core-features.components.highlight', - title: 'Highlight', - type : 'basic', - link : '/docs/core-features/components/highlight' - }, - { - id : 'core-features.components.navigation', - title: 'Navigation', - type : 'basic', - link : '/docs/core-features/components/navigation' - } - ] - }, - { - id : 'core-features.directives', - title : 'Directives', - type : 'group', - children: [ - { - id : 'core-features.directives.autogrow', - title: 'Autogrow', - type : 'basic', - link : '/docs/core-features/directives/autogrow' - }, - { - id : 'core-features.directives.scrollbar', - title: 'Scrollbar', - type : 'basic', - link : '/docs/core-features/directives/scrollbar' - }, - { - id : 'core-features.directives.scroll-reset', - title: 'ScrollReset', - type : 'basic', - link : '/docs/core-features/directives/scroll-reset' - } - ] - }, - { - id : 'core-features.services', - title : 'Services', - type : 'group', - children: [ - { - id : 'core-features.services.config', - title: 'Config', - type : 'basic', - link : '/docs/core-features/services/config' - }, - { - id : 'core-features.services.splash-screen', - title: 'SplashScreen', - type : 'basic', - link : '/docs/core-features/services/splash-screen' - }, - { - id : 'core-features.services.media-watcher', - title: 'MediaWatcher', - type : 'basic', - link : '/docs/core-features/services/media-watcher' - } - ] - }, - { - id : 'core-features.pipes', - title : 'Pipes', - type : 'group', - children: [ - { - id : 'core-features.pipes.find-by-key', - title: 'FindByKey', - type : 'basic', - link : '/docs/core-features/pipes/find-by-key' - } - ] - }, - { - id : 'core-features.validators', - title : 'Validators', - type : 'group', - children: [ - { - id : 'core-features.validators.must-match', - title: 'MustMatch', - type : 'basic', - link : '/docs/core-features/validators/must-match' - } - ] - } - ]; - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Subscribe to media query change - this._fuseMediaWatcherService.onMediaChange$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe(({matchingAliases}) => { - - // Set the drawerMode and drawerOpened - if ( matchingAliases.includes('md') ) - { - this.drawerMode = 'side'; - this.drawerOpened = true; - } - else - { - this.drawerMode = 'over'; - this.drawerOpened = false; - } - - // Mark for check - this._changeDetectorRef.markForCheck(); - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } -} diff --git a/src/app/modules/admin/docs/core-features/core-features.module.ts b/src/app/modules/admin/docs/core-features/core-features.module.ts deleted file mode 100644 index 07a2801d..00000000 --- a/src/app/modules/admin/docs/core-features/core-features.module.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { MatButtonModule } from '@angular/material/button'; -import { MatIconModule } from '@angular/material/icon'; -import { MatSidenavModule } from '@angular/material/sidenav'; -import { MatTabsModule } from '@angular/material/tabs'; -import { MatTreeModule } from '@angular/material/tree'; -import { FuseCardModule } from '@fuse/components/card'; -import { FuseDateRangeModule } from '@fuse/components/date-range'; -import { FuseDrawerModule } from '@fuse/components/drawer'; -import { FuseHighlightModule } from '@fuse/components/highlight'; -import { FuseAlertModule } from '@fuse/components/alert'; -import { FuseNavigationModule } from '@fuse/components/navigation'; -import { FuseScrollResetModule } from '@fuse/directives/scroll-reset'; -import { SharedModule } from 'app/shared/shared.module'; -import { CoreFeaturesComponent } from 'app/modules/admin/docs/core-features/core-features.component'; -import { MockApiComponent } from 'app/modules/admin/docs/core-features/libraries/mock-api/mock-api.component'; -import { AlertComponent } from 'app/modules/admin/docs/core-features/components/alert/alert.component'; -import { CardComponent } from 'app/modules/admin/docs/core-features/components/card/card.component'; -import { DateRangeComponent } from 'app/modules/admin/docs/core-features/components/date-range/date-range.component'; -import { DrawerComponent } from 'app/modules/admin/docs/core-features/components/drawer/drawer.component'; -import { HighlightComponent } from 'app/modules/admin/docs/core-features/components/highlight/highlight.component'; -import { NavigationComponent } from 'app/modules/admin/docs/core-features/components/navigation/navigation.component'; -import { AutogrowComponent } from 'app/modules/admin/docs/core-features/directives/autogrow/autogrow.component'; -import { ScrollbarComponent } from 'app/modules/admin/docs/core-features/directives/scrollbar/scrollbar.component'; -import { ScrollResetComponent } from 'app/modules/admin/docs/core-features/directives/scroll-reset/scroll-reset.component'; -import { ConfigComponent } from 'app/modules/admin/docs/core-features/services/config/config.component'; -import { MediaWatcherComponent } from 'app/modules/admin/docs/core-features/services/media-watcher/media-watcher.component'; -import { SplashScreenComponent } from 'app/modules/admin/docs/core-features/services/splash-screen/splash-screen.component'; -import { FindByKeyComponent } from 'app/modules/admin/docs/core-features/pipes/find-by-key/find-by-key.component'; -import { MustMatchComponent } from 'app/modules/admin/docs/core-features/validators/must-match/must-match.component'; -import { coreFeaturesRoutes } from 'app/modules/admin/docs/core-features/core-features.routing'; - -@NgModule({ - declarations: [ - CoreFeaturesComponent, - MockApiComponent, - AlertComponent, - CardComponent, - DateRangeComponent, - DrawerComponent, - HighlightComponent, - NavigationComponent, - AutogrowComponent, - ScrollbarComponent, - ScrollResetComponent, - ConfigComponent, - SplashScreenComponent, - MediaWatcherComponent, - FindByKeyComponent, - MustMatchComponent - ], - imports : [ - RouterModule.forChild(coreFeaturesRoutes), - MatButtonModule, - MatIconModule, - MatSidenavModule, - MatTabsModule, - MatTreeModule, - FuseAlertModule, - FuseCardModule, - FuseDateRangeModule, - FuseDrawerModule, - FuseHighlightModule, - FuseNavigationModule, - FuseScrollResetModule, - SharedModule - ] -}) -export class CoreFeaturesModule -{ -} diff --git a/src/app/modules/admin/docs/core-features/core-features.routing.ts b/src/app/modules/admin/docs/core-features/core-features.routing.ts deleted file mode 100644 index d7d39b35..00000000 --- a/src/app/modules/admin/docs/core-features/core-features.routing.ts +++ /dev/null @@ -1,146 +0,0 @@ -import { Route } from '@angular/router'; -import { CoreFeaturesComponent } from 'app/modules/admin/docs/core-features/core-features.component'; -import { MockApiComponent } from 'app/modules/admin/docs/core-features/libraries/mock-api/mock-api.component'; -import { AlertComponent } from 'app/modules/admin/docs/core-features/components/alert/alert.component'; -import { CardComponent } from 'app/modules/admin/docs/core-features/components/card/card.component'; -import { DateRangeComponent } from 'app/modules/admin/docs/core-features/components/date-range/date-range.component'; -import { DrawerComponent } from 'app/modules/admin/docs/core-features/components/drawer/drawer.component'; -import { HighlightComponent } from 'app/modules/admin/docs/core-features/components/highlight/highlight.component'; -import { NavigationComponent } from 'app/modules/admin/docs/core-features/components/navigation/navigation.component'; -import { AutogrowComponent } from 'app/modules/admin/docs/core-features/directives/autogrow/autogrow.component'; -import { ScrollbarComponent } from 'app/modules/admin/docs/core-features/directives/scrollbar/scrollbar.component'; -import { ScrollResetComponent } from 'app/modules/admin/docs/core-features/directives/scroll-reset/scroll-reset.component'; -import { ConfigComponent } from 'app/modules/admin/docs/core-features/services/config/config.component'; -import { MediaWatcherComponent } from 'app/modules/admin/docs/core-features/services/media-watcher/media-watcher.component'; -import { SplashScreenComponent } from 'app/modules/admin/docs/core-features/services/splash-screen/splash-screen.component'; -import { FindByKeyComponent } from 'app/modules/admin/docs/core-features/pipes/find-by-key/find-by-key.component'; -import { MustMatchComponent } from 'app/modules/admin/docs/core-features/validators/must-match/must-match.component'; - -export const coreFeaturesRoutes: Route[] = [ - { - path : '', - component: CoreFeaturesComponent, - children : [ - { - path : '', - pathMatch : 'full', - redirectTo: 'libraries/mock-api' - }, - { - path : 'libraries', - children: [ - { - path : 'mock-api', - component: MockApiComponent - } - ] - }, - { - path : 'components', - children: [ - { - path : '', - pathMatch : 'full', - redirectTo: 'alert' - }, - { - path : 'alert', - component: AlertComponent - }, - { - path : 'card', - component: CardComponent - }, - { - path : 'date-range', - component: DateRangeComponent - }, - { - path : 'drawer', - component: DrawerComponent - }, - { - path : 'highlight', - component: HighlightComponent - }, - { - path : 'navigation', - component: NavigationComponent - } - ] - }, - { - path : 'directives', - children: [ - { - path : '', - pathMatch : 'full', - redirectTo: 'autogrow' - }, - { - path : 'autogrow', - component: AutogrowComponent - }, - { - path : 'scrollbar', - component: ScrollbarComponent - }, - { - path : 'scroll-reset', - component: ScrollResetComponent - } - ] - }, - { - path : 'services', - children: [ - { - path : '', - pathMatch : 'full', - redirectTo: 'config' - }, - { - path : 'config', - component: ConfigComponent - }, - { - path : 'splash-screen', - component: SplashScreenComponent - }, - { - path : 'media-watcher', - component: MediaWatcherComponent - } - ] - }, - { - path : 'pipes', - children: [ - { - path : '', - pathMatch : 'full', - redirectTo: 'find-by-key' - }, - { - path : 'find-by-key', - component: FindByKeyComponent - } - ] - }, - { - path : 'validators', - children: [ - { - path : '', - pathMatch : 'full', - redirectTo: 'must-match' - }, - { - path : 'must-match', - component: MustMatchComponent - } - ] - } - ] - } -]; diff --git a/src/app/modules/admin/docs/core-features/directives/autogrow/autogrow.component.html b/src/app/modules/admin/docs/core-features/directives/autogrow/autogrow.component.html deleted file mode 100644 index 509dee8b..00000000 --- a/src/app/modules/admin/docs/core-features/directives/autogrow/autogrow.component.html +++ /dev/null @@ -1,99 +0,0 @@ -
- - -
-
- -
- - -
- - Directives -
-
- -
-

- Autogrow -

-
-
- -
- -
- -

- fuseAutogrow is a <textarea> directive to make them automatically grow depending on their content. It's an alternative for - Angular Material's cdkTextareaAutosize directive with a more native and lightweight approach. -

-

- Exported as: fuseAutogrow -

- -

Module

- - -

Usage

-

- Here's the basic usage of the fuseAutogrow: -

- - - - -

Properties

-
- - - - - - - - - - - - - - - -
NameDescriptionDefault
-
@Input()
-
fuseAutogrowVerticalPadding: number
-
- Padding of the textarea. Must be inline with textarea's padding style. - - 8 -
-
- -
- -
diff --git a/src/app/modules/admin/docs/core-features/directives/autogrow/autogrow.component.ts b/src/app/modules/admin/docs/core-features/directives/autogrow/autogrow.component.ts deleted file mode 100644 index bfa6d789..00000000 --- a/src/app/modules/admin/docs/core-features/directives/autogrow/autogrow.component.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from '@angular/core'; -import { CoreFeaturesComponent } from 'app/modules/admin/docs/core-features/core-features.component'; - -@Component({ - selector : 'autogrow', - templateUrl: './autogrow.component.html', - styles : [''] -}) -export class AutogrowComponent -{ - /** - * Constructor - */ - constructor(private _coreFeaturesComponent: CoreFeaturesComponent) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._coreFeaturesComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/core-features/directives/scroll-reset/scroll-reset.component.html b/src/app/modules/admin/docs/core-features/directives/scroll-reset/scroll-reset.component.html deleted file mode 100644 index 2588b7f9..00000000 --- a/src/app/modules/admin/docs/core-features/directives/scroll-reset/scroll-reset.component.html +++ /dev/null @@ -1,88 +0,0 @@ -
- - -
-
- -
- - -
- - Directives -
-
- -
-

- ScrollReset -

-
-
- -
- -
- -

- fuseScrollReset is a helper directive to reset the given element's scroll position to the top on route changes. -

-

- This directive is especially useful in situations like having a router-outlet inside a scrollable area such as - mat-drawer-content, mat-sidenav-content or a custom scrollable element. -

-

- Exported as: fuseScrollReset -

- -

Module

- - -

Usage

-

- Here are some of the basic usages of the fuseScrollReset: -

- - - - - - - - -
- -
diff --git a/src/app/modules/admin/docs/core-features/directives/scroll-reset/scroll-reset.component.ts b/src/app/modules/admin/docs/core-features/directives/scroll-reset/scroll-reset.component.ts deleted file mode 100644 index ebcbb26c..00000000 --- a/src/app/modules/admin/docs/core-features/directives/scroll-reset/scroll-reset.component.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from '@angular/core'; -import { CoreFeaturesComponent } from 'app/modules/admin/docs/core-features/core-features.component'; - -@Component({ - selector : 'scroll-reset', - templateUrl: './scroll-reset.component.html', - styles : [''] -}) -export class ScrollResetComponent -{ - /** - * Constructor - */ - constructor(private _coreFeaturesComponent: CoreFeaturesComponent) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._coreFeaturesComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/core-features/directives/scrollbar/scrollbar.component.html b/src/app/modules/admin/docs/core-features/directives/scrollbar/scrollbar.component.html deleted file mode 100644 index 56fb1166..00000000 --- a/src/app/modules/admin/docs/core-features/directives/scrollbar/scrollbar.component.html +++ /dev/null @@ -1,255 +0,0 @@ -
- - -
-
- -
- - -
- - Directives -
-
- -
-

- Scrollbar -

-
-
- -
- -
- -

- fuseScrollbar is a wrapper directive for - Perfect Scrollbar - - plugin. -

-

- Exported as: fuseScrollbar -

- -

Module

- - -

Usage

-

- Here's the basic usage of the fuseScrollbar: -

- - - - -

Properties

-
- - - - - - - - - - - - - - - - - - - - -
NameDescriptionDefault
-
@Input()
-
fuseScrollbar: boolean
-
- Whether to enable or disable the custom scrollbars. - - '' -
-
@Input()
-
fuseScrollbarOptions: any
-
- Perfect Scrollbar options - - {{'{}'}} -
-
- -

Methods

-

- It's possible to access the methods of this directive using a @ViewChild or @ViewChildren: -

- - - - - - - - -

- Here's the list of all available methods: -

-
-
- update(): void -
-
- Updates the scrollbar. -
-
-
-
- destroy(): void -
-
- Destroy the custom scrollbar instance. -
-
-
-
- geometry(prefix: string = 'scroll'): ScrollbarGeometry -
-
- Returns the geometry of the scrollable element (scrollLeft, scrollTop, scrollHeight, scrollWidth etc.) -
-
-
-
- position(absolute: boolean = false): ScrollbarPosition -
-
- Returns the position of the scrollable element (scrollLeft, scrollTop) -
-
-
-
- scrollTo(x: number, y?: number, speed?: number): void -
-
- Scrolls to given position. -
-
-
-
- scrollToX(x: number, speed?: number): void -
-
- Scrolls to given position on X axis. -
-
-
-
- scrollToY(y: number, speed?: number): void -
-
- Scrolls to given position on Y axis. -
-
-
-
- scrollToTop(offset: number = 0, speed?: number): void -
-
- Scrolls to top. -
-
-
-
- scrollToBottom(offset: number = 0, speed?: number): void -
-
- Scrolls to bottom. -
-
-
-
- scrollToLeft(offset: number = 0, speed?: number): void -
-
- Scrolls to left. -
-
-
-
- scrollToRight(offset: number = 0, speed?: number): void -
-
- Scrolls to right. -
-
-
-
- scrollToElement(qs: string, offset: number = 0, ignoreVisible: boolean = false, speed?: number): void -
-
- Scrolls to found element based on the given QuerySelector. If ignoreVisible is true then scroll won't - be triggered if the element is already inside the current viewport. -
-
- -
- -
diff --git a/src/app/modules/admin/docs/core-features/directives/scrollbar/scrollbar.component.ts b/src/app/modules/admin/docs/core-features/directives/scrollbar/scrollbar.component.ts deleted file mode 100644 index c0e14efe..00000000 --- a/src/app/modules/admin/docs/core-features/directives/scrollbar/scrollbar.component.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from '@angular/core'; -import { CoreFeaturesComponent } from 'app/modules/admin/docs/core-features/core-features.component'; - -@Component({ - selector : 'scrollbar', - templateUrl: './scrollbar.component.html', - styles : [''] -}) -export class ScrollbarComponent -{ - /** - * Constructor - */ - constructor(private _coreFeaturesComponent: CoreFeaturesComponent) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._coreFeaturesComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/core-features/libraries/mock-api/mock-api.component.html b/src/app/modules/admin/docs/core-features/libraries/mock-api/mock-api.component.html deleted file mode 100644 index de949a3e..00000000 --- a/src/app/modules/admin/docs/core-features/libraries/mock-api/mock-api.component.html +++ /dev/null @@ -1,496 +0,0 @@ -
- - -
-
- -
- - -
- - Libraries -
-
- -
-

- Mock API -

-
-
- -
- -
- -

- MockAPI is a helper library developed specifically for Fuse to mock API endpoints and provide data to your app without having to create an - actual backend application. This way, you can focus on your frontend app and once you finish with the frontend, you can create your backend application to provide - real API endpoints with real data. -

-

- This not only makes you progress faster and put together your app very quickly but you will also know exactly what you will be needing from your API. -

-

- While MockAPI is not suitable for every use case or for every project, there are some cases that using it would make your life easier. These cases - are but not limited to: -

-
    -
  • If you want to focus on the frontend first
  • -
  • If you want to create a mockup of your idea to see if it's going to work or not
  • -
  • If you want to create a small side project for yourself or for your colleagues/company
  • -
  • If you need to present your idea to your client or to your boss without spending many hours and resources
  • -
- - MockAPI is NOT a database or a backend replacement! It works on memory. As soon as you reload your app, all the changes you have made using Mock - API endpoints will go away and replaced with defaults. - - -

How it works?

-

- MockAPI module provides an HttpInterceptor which intercepts all outgoing http requests to return a mock response based on user provided - callback functions. While it intercepts all requests, if the MockAPI module cannot find a callback function for the request type and url, it will - let the request to pass through. This way, you can use the MockAPI along with your real API endpoints. -

- -

FuseMockApiService

-

- The FuseMockApiService is the core of the MockAPI module. This singleton service is used to register API endpoints and callbacks. This is the - only thing you will need to mock API endpoints. -

- -

Methods

-

- All methods return an instance of FuseMockApiHandler. -

-
-
- .onGet(url: string, delay?: number): FuseMockApiHandler -
-
- Registers a url for GET requests. Delay (milliseconds) can be set to delay the response. -
-
-
-
- .onPatch(url: string, delay?: number): FuseMockApiHandler -
-
- Registers a url for PATCH requests. Delay (milliseconds) can be set to delay the response. -
-
-
-
- .onPost(url: string, delay?: number): FuseMockApiHandler -
-
- Registers a url for POST requests. Delay (milliseconds) can be set to delay the response. -
-
-
-
- .onPut(url: string, delay?: number): FuseMockApiHandler -
-
- Registers a url for PUT requests. Delay (milliseconds) can be set to delay the response. -
-
-
-
- .onDelete(url: string, delay?: number): FuseMockApiHandler -
-
- Registers a url for DELETE requests. Delay (milliseconds) can be set to delay the response. -
-
-

FuseMockApiHandler

-

- This is the return type of all methods from the service. This class instance is not directly accessible. It can only be accessed through the - FuseMockApiService allowing method chaining. It has 2 methods: -

-
-
- .reply(callback: FuseMockApiReplyCallback): void -
-
- .replyCount(count: number): void -
-
-

- These methods can be used to register the callback function for the request. The callback has an access to the outgoing HttpRequest which - can be used to access anything from the request such as form data and headers. -

-

- You can limit the reply by chaining the .replyCount and providing the number of times this request should be handled. After the - limit has reached, the request handler will throw an error and won't let the request to pass through. It can be useful for creating one-time-use - endpoints to test "Reset Password" links or testing an unreachable API endpoints and etc. -

-

- The callbacks must return either an array [number, any | string] or an observable that returns the said array. The number - represents the - HTTP status code - - of the response while the any | string represents the actual response. -

-
-
- -

Basic usage

- - - - - - - -

Step by step guide to start using FuseMockApi

-

- It's pretty easy and straightforward to setup the MockAPI module for mocking API endpoints and their responses. Once you understand the underlying - mechanic, you will be able to mock API endpoints in no time. -

- - Please keep in mind that the following step-by-step guide assumes you are doing everything from scratch for the MockAPI like creating directories, adding - files, exporting via barrels etc. Majority of these already setup in both Demo and Starter apps for you so it's a bit easier to start working with the - MockAPI. - - -

1. Prepare the files

-

- Choose a location to store your mocks. By default the Demo app uses src/app/mock-api/ directory. You can use the same directory or choose another one. - For this guide, we will assume you are going to use the default directory. -

- - It's important to keep all mock related files in the same directory because we will create a barrel file that exports all the mock classes and provide that to the - FuseMockApiModule so it can register and use them. - -

- After choosing the location, create a sub-directory relevant to your endpoint and create 2 files in it; one for the mock class and one for the data json: -

- -

- src/app/mock-api/
-  └─ navigation/
-     └─ data.ts
-     └─ api.ts -

- - -

2. Create the class

-

- Edit the api.ts file and inside create an injectable class. -

-

- The FuseMockApi requires one public method called registerHandlers() and it must be implemented. It also needs to be called within the - constructor of your mock class: -

- - - - -

3. Create the data

-

- Edit the data.ts file and add your default data as an exported const value. You can have more than one const per file, - just remember to export all of them: -

- - - - -

3. Import the data into the Mock class

-

- Return back to api.ts file, import your data and set them as class properties so they can be accessible within the class: -

- - - - -

4. Register the endpoints and callbacks

-

- Inside the registerHandlers() method, define your endpoints and callbacks to provide data: -

- - - - -

5. Create a barrel file and import FuseMockApiModule

-

- Navigate back to the root of your mock data directory, by default it's the src/app/mock-api/ directory, and create an index.ts file. -

- -

- src/app/mock-api/
-  └─ auth/
-  └─ navigation/
-  └─ user/
-  └─ index.ts
-

- -

- Edit the index.ts file to create a barrel from the services. Only import the services and not the data files, create an array from them and then export - that array: -

- - - -

- After that, head to the app.module.ts file, import the FuseMockApiModule and supply the array of services you have exported: -

- - - - -

6. (Optional) Set a global delay

-

- You can also set a global delay (ms) to all of your Mock API endpoints to simulate a slow connection, a server that's under attack or failing, some kind - of service interruption and etc. -

- - - - -

7. Consume the mock API endpoints

-

- Now you can consume your mock API endpoints anywhere from your app using Angular's HttpClient and the MockAPI module will catch the - requests. If there is a matching url and a request type, the MockAPI will provide the response from the provided callback. If there isn't one, then - the MockAPI will let the request to pass through allowing you to use a real API endpoints along with the mocked ones. -

- - - -
- -
diff --git a/src/app/modules/admin/docs/core-features/libraries/mock-api/mock-api.component.ts b/src/app/modules/admin/docs/core-features/libraries/mock-api/mock-api.component.ts deleted file mode 100644 index 3c13360e..00000000 --- a/src/app/modules/admin/docs/core-features/libraries/mock-api/mock-api.component.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from '@angular/core'; -import { CoreFeaturesComponent } from 'app/modules/admin/docs/core-features/core-features.component'; - -@Component({ - selector : 'mock-api', - templateUrl: './mock-api.component.html', - styles : [''] -}) -export class MockApiComponent -{ - /** - * Constructor - */ - constructor(private _coreFeaturesComponent: CoreFeaturesComponent) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._coreFeaturesComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/core-features/pipes/find-by-key/find-by-key.component.html b/src/app/modules/admin/docs/core-features/pipes/find-by-key/find-by-key.component.html deleted file mode 100644 index 3e530fcd..00000000 --- a/src/app/modules/admin/docs/core-features/pipes/find-by-key/find-by-key.component.html +++ /dev/null @@ -1,197 +0,0 @@ -
- - -
-
- -
- - -
- - Pipes -
-
- -
-

- findByKey -

-
-
- -
- -
- -

- fuseFindByKey is a helper pipe that finds entries from an object using given key-source set. -

- -

Module

- - -

Usage

- -

- Consider this array of objects representing the tags and tasks data stored on the backend: -

- - - -

- Normally, you would join these two data together in the backend before sending it to the frontend so you can access tags of a task right from the task - itself: -

- - - -

- But, let's say you cannot join them. You have no access to the backend app or you cannot make any changes to it and you have to work with what you have. In - this case, you can use the fuseFindByKey pipe to get the tags of a task without joining the two data using javascript: -

- - - -

- The above code will iterate through the tasks, and for each task, it will also iterate the task's tags. -

-

- task.tags array normally holds the ids of the assigned tags. But using fuseFindByKey pipe, we can use those ids to - extract the actual tag object from the tags array. -

- -
- -
diff --git a/src/app/modules/admin/docs/core-features/pipes/find-by-key/find-by-key.component.ts b/src/app/modules/admin/docs/core-features/pipes/find-by-key/find-by-key.component.ts deleted file mode 100644 index 58acf540..00000000 --- a/src/app/modules/admin/docs/core-features/pipes/find-by-key/find-by-key.component.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from '@angular/core'; -import { CoreFeaturesComponent } from 'app/modules/admin/docs/core-features/core-features.component'; - -@Component({ - selector : 'find-by-key', - templateUrl: './find-by-key.component.html', - styles : [''] -}) -export class FindByKeyComponent -{ - /** - * Constructor - */ - constructor(private _coreFeaturesComponent: CoreFeaturesComponent) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._coreFeaturesComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/core-features/services/config/config.component.html b/src/app/modules/admin/docs/core-features/services/config/config.component.html deleted file mode 100644 index 07b0b6d8..00000000 --- a/src/app/modules/admin/docs/core-features/services/config/config.component.html +++ /dev/null @@ -1,153 +0,0 @@ -
- - -
-
- -
- - -
- - Services -
-
- -
-

- Config -

-
-
- -
- -
- -

- FuseConfigService is a singleton service to store and access an application wide configuration object. It can be used to store any kind of data and - can be accessed from anywhere within your application. -

- -

Module

- - -

Default configuration

-

- By default, the application wide configuration is stored in src/app/core/config/app.config.ts file and it includes the layout style as - well as the color theme configurations: -

- - - -

- The default configuration is supplied to the FuseConfigService using the FuseConfigModule.forRoot() in AppModule: -

- - - - -

Methods

-

- To set a configuration use config setter on FuseConfigService. The setter will intelligently merge the configuration by replacing only - the given options if they exist while preserving others. If the supplied option does not exist on the configuration, it will be added: -

- - - -

- To get the configuration use config$ getter on FuseConfigService which returns an Observable of the configuration object: -

- - - - -
- -
diff --git a/src/app/modules/admin/docs/core-features/services/config/config.component.ts b/src/app/modules/admin/docs/core-features/services/config/config.component.ts deleted file mode 100644 index a098146e..00000000 --- a/src/app/modules/admin/docs/core-features/services/config/config.component.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from '@angular/core'; -import { CoreFeaturesComponent } from 'app/modules/admin/docs/core-features/core-features.component'; - -@Component({ - selector : 'config', - templateUrl: './config.component.html', - styles : [''] -}) -export class ConfigComponent -{ - /** - * Constructor - */ - constructor(private _coreFeaturesComponent: CoreFeaturesComponent) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._coreFeaturesComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/core-features/services/media-watcher/media-watcher.component.html b/src/app/modules/admin/docs/core-features/services/media-watcher/media-watcher.component.html deleted file mode 100644 index 43990cea..00000000 --- a/src/app/modules/admin/docs/core-features/services/media-watcher/media-watcher.component.html +++ /dev/null @@ -1,103 +0,0 @@ -
- - -
-
- -
- - -
- - Services -
-
- -
-

- Media Watcher -

-
-
- -
- -
- -

- FuseMediaWatcherService is a singleton service to watch media changes. It automatically registers the breakpoints from TailwindCSS configuration, so - you can use the service without needing to configure it first. -

- -

Module

- - -

Methods

-

- To watch changes on registered breakpoints, you can use the onMediaChange$ getter: -

- - - -

- You can also listen for custom media queries using onMediaQueryChange$(query: string) method: -

- - - - -
- -
diff --git a/src/app/modules/admin/docs/core-features/services/media-watcher/media-watcher.component.ts b/src/app/modules/admin/docs/core-features/services/media-watcher/media-watcher.component.ts deleted file mode 100644 index 2b61334e..00000000 --- a/src/app/modules/admin/docs/core-features/services/media-watcher/media-watcher.component.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from '@angular/core'; -import { CoreFeaturesComponent } from 'app/modules/admin/docs/core-features/core-features.component'; - -@Component({ - selector : 'media-watcher', - templateUrl: './media-watcher.component.html', - styles : [''] -}) -export class MediaWatcherComponent -{ - /** - * Constructor - */ - constructor(private _coreFeaturesComponent: CoreFeaturesComponent) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._coreFeaturesComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/core-features/services/splash-screen/splash-screen.component.html b/src/app/modules/admin/docs/core-features/services/splash-screen/splash-screen.component.html deleted file mode 100644 index a54b8fc3..00000000 --- a/src/app/modules/admin/docs/core-features/services/splash-screen/splash-screen.component.html +++ /dev/null @@ -1,73 +0,0 @@ -
- - -
-
- -
- - -
- - Services -
-
- -
-

- Splash Screen -

-
-
- -
- -
- -

- FuseSplashScreenService is a singleton service to control the splash screen. By default, the splash screen goes away automatically as soon as - Angular loads for the first time but, you can still show or hide it using the service afterwards. -

- -

Module

- - -

Methods

-
-
- show(): void -
-
- Shows the splash screen. -
-
-
-
- hide(): void -
-
- Hides the splash screen. -
-
- -
- -
diff --git a/src/app/modules/admin/docs/core-features/services/splash-screen/splash-screen.component.ts b/src/app/modules/admin/docs/core-features/services/splash-screen/splash-screen.component.ts deleted file mode 100644 index 1ef75df8..00000000 --- a/src/app/modules/admin/docs/core-features/services/splash-screen/splash-screen.component.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from '@angular/core'; -import { CoreFeaturesComponent } from 'app/modules/admin/docs/core-features/core-features.component'; - -@Component({ - selector : 'splash-screen', - templateUrl: './splash-screen.component.html', - styles : [''] -}) -export class SplashScreenComponent -{ - /** - * Constructor - */ - constructor(private _coreFeaturesComponent: CoreFeaturesComponent) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._coreFeaturesComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/core-features/validators/must-match/must-match.component.html b/src/app/modules/admin/docs/core-features/validators/must-match/must-match.component.html deleted file mode 100644 index e948fab1..00000000 --- a/src/app/modules/admin/docs/core-features/validators/must-match/must-match.component.html +++ /dev/null @@ -1,117 +0,0 @@ -
- - -
-
- -
- - -
- - Validators -
-
- -
-

- mustMatch -

-
-
- -
- -
- -

- The mustMatch validator can be used to check if two different form fields has the same value. For example, a Confirm password should - have the same value with the Password field. To validate that, the mustMatch validator can be used. -

- -

Usage

- - - - -

Parameters

-
- - - - - - - - - - - - - - - - - -
NameDescription
-
controlPath: string
-
- A dot-delimited string values that define the path to the control. -
-
matchingControlPath: string
-
- A dot-delimited string values that define the path to the matching control. -
-
-

- Because the mustMatch validator requires parameters, it must be used within the validators option of the form builder: -

- - - -

- To show an error message on the field, the mat-error element can be used within the mat-form-field: -

- - - - -
- -
diff --git a/src/app/modules/admin/docs/core-features/validators/must-match/must-match.component.ts b/src/app/modules/admin/docs/core-features/validators/must-match/must-match.component.ts deleted file mode 100644 index 46e47f99..00000000 --- a/src/app/modules/admin/docs/core-features/validators/must-match/must-match.component.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from '@angular/core'; -import { CoreFeaturesComponent } from 'app/modules/admin/docs/core-features/core-features.component'; - -@Component({ - selector : 'must-match', - templateUrl: './must-match.component.html', - styles : [''] -}) -export class MustMatchComponent -{ - /** - * Constructor - */ - constructor(private _coreFeaturesComponent: CoreFeaturesComponent) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._coreFeaturesComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/guides/authentication/jwt/jwt.html b/src/app/modules/admin/docs/guides/authentication/jwt/jwt.html deleted file mode 100644 index 859a6f78..00000000 --- a/src/app/modules/admin/docs/guides/authentication/jwt/jwt.html +++ /dev/null @@ -1,131 +0,0 @@ -
- - -
-
- -
- -
- - Guides -
-
- - Authentication -
-
- -
-

- JWT -

-
-
- -
- -
- -

- Fuse provides an implementation for JWT authorization. You can immediately hook up your backend API where you generate a JWT token and send it back and start - using Fuse's JWT implementation. -

-

- This implementation of JWT can be found within app/core/auth/ directory. Here's the quick overview of provided files: -

-
    -
  • -

    Guards:

    -

    auth and noAuth guards to protect the routes.

    -
  • -
  • -

    AuthInterceptor

    -

    An interceptor to attach the access_token to the header of the requests and catching 401 responses.

    -
  • -
  • -

    AuthService

    -

    A service for signing in and out as well as checking the authenticated status of the user.

    -
  • -
  • -

    AuthUtils

    -

    Set of utilities to decode the JWT token.

    -
  • -
- -

Setting up

-

1. Set up your backend API

-

- Before start doing anything within Fuse, prepare your backend API. You will need API endpoints for signing in, signing out and - refreshing the token. These will usually be provided with your choice of JWT backend implementation by default so you don't have to do too much - work. -

- -

2. Configure the AuthService

-

- AuthService includes methods for signing in and out as well as refreshing the token. Edit the AuthService file and change the API - endpoints so the requests can go through. -

-

- And that's pretty much it! You can now sign in, sign out and refresh the access token. -

- -

A note about storing the access token

-

- Fuse stores the access token in the local storage. There are a lot of debates going on about whether it is safe or not to store it in the local - storage. We believe it doesn't matter. Javascript always going to be executed in the browser, it doesn't matter where you store the JWT token, whether in the local - storage or in the memory as a variable, it can always be accessed and read! -

-

- The only thing you have to be careful about is to protect your app against attacks like XSS, CSRF or XSRF. Angular does an amazingly good job to protect you against - these attacks by default but still, you have to be careful what to include into your app. And if you happen to have a security hole that can cause these attacks and - allows attackers to run their own Javascript code on your app, local JWT token is going to be the least of your worries. -

- -

Refresh token

-

- Refresh token is another type of token that usually sent with the access token when you first login and it allows refreshing the access - token. -

-

- We are not going to go into any details about it since you can do your own research, but the premise is, you store the refresh token in an - HTTPOnly cookie which will be automatically added into the header of any request and can be used to sending back a fresh access token - from your backend API if needed. -

-

- Since Javascript cannot read or write HTTPOnly cookies, refresh tokens can only be accessed and set via the requests and responses by - your backend implementation. Basically, the refresh token implementation needs to be done in your backend, there is nothing that can be done in Fuse or - in Javascript. -

- - - - - -
- -
diff --git a/src/app/modules/admin/docs/guides/authentication/jwt/jwt.ts b/src/app/modules/admin/docs/guides/authentication/jwt/jwt.ts deleted file mode 100644 index 12492dc4..00000000 --- a/src/app/modules/admin/docs/guides/authentication/jwt/jwt.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from '@angular/core'; -import { GuidesComponent } from 'app/modules/admin/docs/guides/guides.component'; - -@Component({ - selector : 'jwt', - templateUrl: './jwt.html', - styles : [''] -}) -export class JwtComponent -{ - /** - * Constructor - */ - constructor(private _guidesComponent: GuidesComponent) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._guidesComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/guides/customization/component-theming/component-theming.html b/src/app/modules/admin/docs/guides/customization/component-theming/component-theming.html deleted file mode 100644 index d25a23d2..00000000 --- a/src/app/modules/admin/docs/guides/customization/component-theming/component-theming.html +++ /dev/null @@ -1,188 +0,0 @@ -
- - -
-
- -
- -
- - Guides -
-
- - Customization -
-
- -
-

- Component Theming -

-
-
- -
- -
- -

- Normally, Angular Material requires a separate .scss file for theming and that file must be included into a mixin where the defined Angular Material themes can be - applied. This approach not only forces you to create another .scss file for component theming, but it also forces you to import that file from another place just so - you can use the Angular Material mixin to apply the theme. -

-

- This brakes the modularity because now you have a reference to your component's theming file from who knows where and you also have to remember to do all this again - and again every time you want to use the theme colors from your components. -

-

- Fuse, on the other hand, provides a way easier method to add theming to your components: Tailwind utilities! -

- -

Color palette utilities

-

- As mentioned before, Angular Material uses 3 main palettes to generate themes; "Primary", "Accent" and "Warn". Being able to access these palettes and use their colors - with your components is a must have feature, otherwise you wouldn't be able to create components, apps or pages that "belong" to your app. -

-

- All palette colors are available as Tailwind utility classes, and since these palettes are no more than Tailwind color palettes, they are processed as one by Tailwind, - therefore, every single color related utility you have in Tailwind also have primary, accent and warn colors and you - can use them just like any other color utility: -

- - - - - - - - - - - - - - - - -

Other color utilities

-

- There are also other color utilities to quickly set the background or the text color of an element. These special utilities - have different values on different schemes. For example, "bg-card" will have different colors depending on the selected - scheme so you don't have to set the background color explicitly for "Dark" themes. -

- - - - - - - -
- -
diff --git a/src/app/modules/admin/docs/guides/customization/component-theming/component-theming.ts b/src/app/modules/admin/docs/guides/customization/component-theming/component-theming.ts deleted file mode 100644 index 9b40852c..00000000 --- a/src/app/modules/admin/docs/guides/customization/component-theming/component-theming.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from '@angular/core'; -import { GuidesComponent } from 'app/modules/admin/docs/guides/guides.component'; - -@Component({ - selector : 'component-theming', - templateUrl: './component-theming.html', - styles : [''] -}) -export class ComponentThemingComponent -{ - /** - * Constructor - */ - constructor(private _guidesComponent: GuidesComponent) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._guidesComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/guides/customization/page-layouts/page-layouts.html b/src/app/modules/admin/docs/guides/customization/page-layouts/page-layouts.html deleted file mode 100644 index 21c2e9de..00000000 --- a/src/app/modules/admin/docs/guides/customization/page-layouts/page-layouts.html +++ /dev/null @@ -1,82 +0,0 @@ -
- - -
-
- -
- -
- - Guides -
-
- - Customization -
-
- -
-

- Page Layouts -

-
-
- -
- -
- -

- Like Theme layouts, Fuse also provides examples for variety of different page layouts. These layouts are designed for the content of the app and they provide - consistency. -

-

- Unlike Theme layouts, Page layouts are NOT components, they are basically pre-made pages for you to reference and use - it as the shell for your pages. -

-

- All page layouts can be found within the Demo app, you can try them over there and choose one that fits your needs. -

- - - - -
- -
diff --git a/src/app/modules/admin/docs/guides/customization/page-layouts/page-layouts.ts b/src/app/modules/admin/docs/guides/customization/page-layouts/page-layouts.ts deleted file mode 100644 index 740efbeb..00000000 --- a/src/app/modules/admin/docs/guides/customization/page-layouts/page-layouts.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from '@angular/core'; -import { GuidesComponent } from 'app/modules/admin/docs/guides/guides.component'; - -@Component({ - selector : 'page-layouts', - templateUrl: './page-layouts.html', - styles : [''] -}) -export class PageLayoutsComponent -{ - /** - * Constructor - */ - constructor(private _guidesComponent: GuidesComponent) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._guidesComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/guides/customization/splash-screen/splash-screen.html b/src/app/modules/admin/docs/guides/customization/splash-screen/splash-screen.html deleted file mode 100644 index ce19dc39..00000000 --- a/src/app/modules/admin/docs/guides/customization/splash-screen/splash-screen.html +++ /dev/null @@ -1,141 +0,0 @@ -
- - -
-
- -
- -
- - Guides -
-
- - Customization -
-
- -
-

- Splash Screen -

-
-
- -
- -
- -

- The splash screen is the screen that shows up when your app is loading. It's NOT just a cosmetic screen or something that you can - make faster, it simply shows up while Angular loads and hides immediately after it finishes loading. -

- -

How it works?

-

- When you first arrive your app via its website address, the index.html loads first. It has all the required scripts injected in it by the - AngularCLI, so as soon as it loads, it also starts loading the required script files. -

-

- After those required script files loaded, Angular starts the Bootstrapping progress and loads the first component (usually the AppComponent). Then - AppComponent takes over and loads other modules and components and your app starts running. -

-

- While all of these happening, you will see nothing on the screen simply because the index.html file has nothing in it except the script injections - and the entry point for your AppComponent. That's where the splash screen comes into play and hides the white screen of loading. -

- -

Customizing the screen

-

- Splash screen content stays in the index.html file. The fuse-splash-screen dummy element holds everything related to the splash screen. - This element is not an actual Angular component, it's just a simple wrapper to hold everything you may want to show on the splash screen. -

-

- Splash screen styles are located in src/assets/styles/splash-screen.css file. -

-

- You can change the styles to modify the look of the splash screen and put anything you want into the fuse-splash-screen element to show on the - page. -

- - Please note, you cannot run Angular components in here. Basically, by the time you can run Angular components, you won't be needing the - splash screen because everything would already be loaded! - -

- If you don't want to show the splash screen and you are happy with the white screen of loading, then you can simply remove the - fuse-splash-screen dummy element and its content from the index.html file as well as the link - element that loads the splash-screen.css file: -

- - - - - - - - -
- -
diff --git a/src/app/modules/admin/docs/guides/customization/splash-screen/splash-screen.ts b/src/app/modules/admin/docs/guides/customization/splash-screen/splash-screen.ts deleted file mode 100644 index b16e097d..00000000 --- a/src/app/modules/admin/docs/guides/customization/splash-screen/splash-screen.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from '@angular/core'; -import { GuidesComponent } from 'app/modules/admin/docs/guides/guides.component'; - -@Component({ - selector : 'splash-screen', - templateUrl: './splash-screen.html', - styles : [''] -}) -export class SplashScreenCustomizationComponent -{ - /** - * Constructor - */ - constructor(private _guidesComponent: GuidesComponent) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._guidesComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/guides/customization/tailwindcss/tailwindcss.html b/src/app/modules/admin/docs/guides/customization/tailwindcss/tailwindcss.html deleted file mode 100644 index bd878816..00000000 --- a/src/app/modules/admin/docs/guides/customization/tailwindcss/tailwindcss.html +++ /dev/null @@ -1,117 +0,0 @@ -
- - -
-
- -
- -
- - Guides -
-
- - Customization -
-
- -
-

- TailwindCSS -

-
-
- -
- -
- -

- As per the official page of Tailwind CSS, it is a highly customizable, low-level CSS framework that gives you all of the building blocks you need to build bespoke - designs without any annoying opinionated styles you have to fight to override. -

-

- To simply put, Tailwind provides helper classes for almost every CSS rule available. -

-

- Fuse includes and uses Tailwind whenever it's possible. There are no traditional styles available within the Fuse, Though there are edge cases that cannot be - styled using Tailwind, 99% of the Fuse is styled using Tailwind. -

- -

Configuration

-

- To use Tailwind, you don't need to do any setup as all Tailwind classes can be accessible from any HTML file you create by default. -

-

- Tailwind configuration can be found in /src/tailwind.config.js file. This file is used to configure the generated classes by Tailwind. We already - configured the Tailwind using the config file to provide sensible defaults for a web app. -

- -

Tailwind and Fuse

-

- Fuse also uses Tailwind as its main configuration source for Angular Material components. Basically, some of the Tailwind configuration is exported during - the Tailwind's build process and made available for Fuse's internal use cases. This allows Fuse to use Tailwind's configuration as the single source of truth. -

-

- To summarize; if you want to add/edit/remove any color, change the font families, modify the breakpoints or change any other visual configuration, you have to do - that via the Tailwind's config file and they will be carried over to the Angular Material components. -

- -

Building Tailwind

-

- Since Angular v11, Tailwind support has been added into the AngularCLI so you don't have to do anything to build Tailwind. -

- -

Official docs

-

- Official Tailwind CSS documentation: - https://tailwindcss.com/ - -

- - - - -
- -
diff --git a/src/app/modules/admin/docs/guides/customization/tailwindcss/tailwindcss.ts b/src/app/modules/admin/docs/guides/customization/tailwindcss/tailwindcss.ts deleted file mode 100644 index 00db40a8..00000000 --- a/src/app/modules/admin/docs/guides/customization/tailwindcss/tailwindcss.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from '@angular/core'; -import { GuidesComponent } from 'app/modules/admin/docs/guides/guides.component'; - -@Component({ - selector : 'tailwindcss', - templateUrl: './tailwindcss.html', - styles : [''] -}) -export class TailwindCSSComponent -{ - /** - * Constructor - */ - constructor(private _guidesComponent: GuidesComponent) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._guidesComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/guides/customization/theme-layouts/theme-layouts.html b/src/app/modules/admin/docs/guides/customization/theme-layouts/theme-layouts.html deleted file mode 100644 index e5c2fecb..00000000 --- a/src/app/modules/admin/docs/guides/customization/theme-layouts/theme-layouts.html +++ /dev/null @@ -1,138 +0,0 @@ -
- - -
-
- -
- -
- - Guides -
-
- - Customization -
-
- -
-

- Theme Layouts -

-
-
- -
- -
- -

- As previously mentioned, Fuse comes with variety of different layouts. These layouts are on the theme level, meaning that when changed, they can completely - alter the look of your app. -

-

- By default, layouts are applied automatically via the LayoutComponent. The default layout is set by the app.config.ts file from - app/core/config/ directory. This configuration file is supplied as the default configuration to the FuseConfigService which is a custom - made configuration service to store, write and read application wide configurations. -

- - More detailed information about FuseConfigService can be found in the - Core features > Services > - Config - - section of this documentation. - -

- After the default layout is read and set from the configuration service, LayoutComponent will also read the current route tree, walk through it starting - from the root all the way to the current route and look for the layout key-value from the data object. If found, LayoutComponent - will switch to that layout. This is particularly useful if you want to have different layouts for different portions of your app. -

-

- Here's an example from app.routing.ts file that loads the EmptyLayout for authentication pages: -

- - - -

- And here's another example that loads the classic layout: -

- - - -

LayoutComponent

-

- The LayoutComponent plays an important part for managing important things such as the current layout and the color theme. Because of it, - removing the LayoutComponent and using the individual layouts by themselves is not possible. -

- - - - -
- -
diff --git a/src/app/modules/admin/docs/guides/customization/theme-layouts/theme-layouts.ts b/src/app/modules/admin/docs/guides/customization/theme-layouts/theme-layouts.ts deleted file mode 100644 index 181af81f..00000000 --- a/src/app/modules/admin/docs/guides/customization/theme-layouts/theme-layouts.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from '@angular/core'; -import { GuidesComponent } from 'app/modules/admin/docs/guides/guides.component'; - -@Component({ - selector : 'theme-layouts', - templateUrl: './theme-layouts.html', - styles : [''] -}) -export class ThemeLayoutsComponent -{ - /** - * Constructor - */ - constructor(private _guidesComponent: GuidesComponent) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._guidesComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/guides/customization/theming/theming.html b/src/app/modules/admin/docs/guides/customization/theming/theming.html deleted file mode 100644 index 0193acea..00000000 --- a/src/app/modules/admin/docs/guides/customization/theming/theming.html +++ /dev/null @@ -1,384 +0,0 @@ -
- - -
-
- -
- -
- - Guides -
-
- - Customization -
-
- -
-

- Theming -

-
-
- -
- -
- -

- Since Fuse uses Angular Material as its primary UI library, it also uses the - Angular Material Theming - - with a twist. -

-

- Rather than using Angular Material's default theming process, Fuse incorporates that into the Tailwind's build process. This way, you can configure - your application using Tailwind's configuration file and things like colors, font families, breakpoints and etc. will be carried over and applied to - the Angular Material components. -

-

- You can also create color themes using Tailwind's configuration and they will also be carried over and used for building Angular Material themes. - Here's an example theme configuration from Tailwind's configuration: -

- - - -

- Here's the general structure of a theme configuration: -

- - - -
    -
  • -

    primary, accent, warn

    - These are the 3 main color palettes of the theme. They must be a Tailwind color palette. - If DEFAULT is provided, that will become the main color of that palette otherwise the 500 hue level from - the same palette will be used as the DEFAULT. -
  • -
  • -

    on-primary, on-accent, on-warn

    - These are the 3 main contrasting color palettes of the theme. They can be either a complete or a partial - Tailwind color palette. By default, Fuse will automatically generate contrasting colors using the colors - from "Primary", "Accent" and "Warn" palettes but for some reason, if you more control over the contrasting - colors, you can use these objects to customize them. -
  • -
- - -
-

- Angular Material library uses 3 main color palettes and their contrasting colors to theme their - components. Here we basically moved that configuration (in a customized and simplified way) into - the Tailwind. -

-

- In order to have a complete understanding how Angular Material components are themed, you can check - their official guides here: - https://material.angular.io/guide/theming - -

-
-
- -

- Let's break down the 'default' theme configuration. This one is required for entire theming system and Fuse to work correctly: -

- - - - -

- Let's break down the rest of the theme configuration: -

- - - - -

Color palettes

-

- By default, Tailwind provides lots of color palettes so you can always use them to create themes. -

-

- If you have a different color that you want to use, like a brand color or a custom hand picked one, you must - generate a Tailwind-like color palette in order to be able to generate themes with. There are couple ways - of creating such palettes; -

-
    -
  1. - You can create them by hand. Though this gives you complete freedom, it is by far the hardest one - especially if you don't have any experience with colors and their relations. -
  2. -
  3. - You can use online tools to generate Tailwind color palettes. They usually do a decent job for creating - palettes but they could be a little off in some cases. -
  4. -
  5. - You can use our custom generatePalette() helper method to create palettes either from a single - color, or from multiple colors. -
  6. -
- -

generatePalette()

-

- This custom helper method allows you to generate Tailwind-like palettes from either a single color or multiple colors: -

- - - -

- Usually, if you are working on an app by yourself, both designing and developing it, generating a complete - Tailwind-like palette from a single color is a great option. But that's not always the case and most palette - generators only give you an option to generate a palette using a single color. That becomes problematic if - you have more than one color because then you would have to go through the generated palette and try to fit - your remaining colors into it. -

-

- This is exactly where the generatePalette() method shines! -

-

- You can provide an object with multiple color levels and it will handle the rest for you. The best thing about - the generatePalette() method is that it will actually respect the colors you choose. It will adjust - the palette to make sure all the colors you provided will fit into it seamlessly. -

-

- Once you generate the palettes, you can use them to create color themes for your app. -

- -

Setting the default theme

-

- By default, the "default" theme will be used as the default theme for your application. If for some reason, you want to have more than - one themes and choose something other than the "default", you can do so by setting the default theme via app/core/config/app.config.ts file. - You can also change the theme runtime using the FuseConfigService. -

- -

Schemes

-

- Every color theme you configure will automatically have 2 schemes; Light and Dark. This way you can immediately - change to a "dark" mode without losing your theme or setting up a separate "dark" theme. -

-

- You can set the default scheme via app/core/config/app.config.ts file. You can also change the scheme runtime using the - FuseConfigService. -

-

- While you can set the scheme to "light" or "dark" you can also set it to "auto". "auto" mode will automatically switch between the "light" and "dark" - schemes depending on the user's operating system's setting. -

- - - - -
- -
diff --git a/src/app/modules/admin/docs/guides/customization/theming/theming.ts b/src/app/modules/admin/docs/guides/customization/theming/theming.ts deleted file mode 100644 index 82e7f1d6..00000000 --- a/src/app/modules/admin/docs/guides/customization/theming/theming.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from '@angular/core'; -import { GuidesComponent } from 'app/modules/admin/docs/guides/guides.component'; - -@Component({ - selector : 'theming', - templateUrl: './theming.html', - styles : [''] -}) -export class ThemingComponent -{ - /** - * Constructor - */ - constructor(private _guidesComponent: GuidesComponent) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._guidesComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/guides/development/component-structure/component-structure.html b/src/app/modules/admin/docs/guides/development/component-structure/component-structure.html deleted file mode 100644 index b11b5857..00000000 --- a/src/app/modules/admin/docs/guides/development/component-structure/component-structure.html +++ /dev/null @@ -1,180 +0,0 @@ -
- - -
-
- -
- -
- - Guides -
-
- - Development -
-
- -
-

- Component Structure -

-
-
- -
- -
- - - - Fuse uses route based component loading strategy. There are componentless and empty-path routes specifically structured to load components without hard - coding them into templates. This provides great extensibility and scalability to the app and we strongly suggest you to follow the same path. - - -

- Here's the diagram of the Fuse's default component structure for the reference: -

- - -
- -
- AppComponent - -
- LayoutComponent - -
- Layout - -
- -
- Navigation -
- -
- -
- Header -
- -
- <router-outlet> -
- -
- Footer -
-
-
-
-
-
-
- -

AppComponent

-

- This is the entry point of the application. It imports all the necessary modules in order for Fuse and your app to work. All 3rd party modules also imported - and configured here. -

- -

LayoutComponent

-

- This component makes the layout switching easier. Fuse provides variety of different layouts like ClassicLayout or - EnterpriseLayout and this component can load or switch those layouts at any time. -

-

- To understand how LayoutComponent works, look at this portion of the app.routing.ts file: -

- - - -

- As you can see, there is an empty-path route at the beginning of the Admin routes which essentially loads the LayoutComponent into the - <router-outlet> of the AppComponent. -

-

- After that, LayoutComponent loads the selected layout. All layouts includes a <router-outlet> in their templates which then loads - the actual component that's being requested depending on the active route. -

-

- More detailed information about layouts can be found in the - Customization > Theme layouts - section of this - documentation. -

- -

Layout

-

- This is the selected layout that's being loaded by the LayoutComponent. All layouts located at the app/layout/layouts/ directory and these - layouts include common components like Navigation, Header and Footer. -

- - - - -
- -
diff --git a/src/app/modules/admin/docs/guides/development/component-structure/component-structure.ts b/src/app/modules/admin/docs/guides/development/component-structure/component-structure.ts deleted file mode 100644 index 961bc3a7..00000000 --- a/src/app/modules/admin/docs/guides/development/component-structure/component-structure.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from '@angular/core'; -import { GuidesComponent } from 'app/modules/admin/docs/guides/guides.component'; - -@Component({ - selector : 'component-structure', - templateUrl: './component-structure.html', - styles : [''] -}) -export class ComponentStructureComponent -{ - /** - * Constructor - */ - constructor(private _guidesComponent: GuidesComponent) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._guidesComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/guides/development/deployment/deployment.html b/src/app/modules/admin/docs/guides/development/deployment/deployment.html deleted file mode 100644 index 93cd0c45..00000000 --- a/src/app/modules/admin/docs/guides/development/deployment/deployment.html +++ /dev/null @@ -1,99 +0,0 @@ -
- - -
-
- -
- -
- - Guides -
-
- - Development -
-
- -
-

- Deployment -

-
-
- -
- -
- -

- To deploy your application, you have to compile it, and then host the JavaScript, CSS, and HTML on a web server. Built Angular applications are very portable and - can live in any environment or served by any technology, such as Node, Java, .NET, PHP, and many others. -

-

- To build your application for production, run the following command: -

- - -

Alternate command

- -

- Alias for ng build --prod. -

- -

- If you are getting error messages that includes keywords like HEAP, JS stack tree, - out of memory while trying to run ng build --prod or npm run build:prod commands, - you may have an older Node.js version, try updating your Node.js to the latest LTS version and then try again. -

- - - - -
- -
diff --git a/src/app/modules/admin/docs/guides/development/deployment/deployment.ts b/src/app/modules/admin/docs/guides/development/deployment/deployment.ts deleted file mode 100644 index f3fad75f..00000000 --- a/src/app/modules/admin/docs/guides/development/deployment/deployment.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from '@angular/core'; -import { GuidesComponent } from 'app/modules/admin/docs/guides/guides.component'; - -@Component({ - selector : 'deployment', - templateUrl: './deployment.html', - styles : [''] -}) -export class DeploymentComponent -{ - /** - * Constructor - */ - constructor(private _guidesComponent: GuidesComponent) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._guidesComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/guides/development/directory-structure/directory-structure.html b/src/app/modules/admin/docs/guides/development/directory-structure/directory-structure.html deleted file mode 100644 index 3b976cbf..00000000 --- a/src/app/modules/admin/docs/guides/development/directory-structure/directory-structure.html +++ /dev/null @@ -1,342 +0,0 @@ -
- - -
-
- -
- -
- - Guides -
-
- - Development -
-
- -
-

- Directory Structure -

-
-
- -
- -
- - - Fuse's directory structure might look overwhelming and intimidating at first, but following this page and giving a bit time to understand it before jumping - right into code will help immensely. - -

- Fuse built around the idea of multi-purpose and multi-layout. You can think of Fuse as a Starter kit and a guide rather than just a simple - template. The purpose of Fuse is not only provide a pre-made styles for visual elements but is also be a guide to follow while building an app. -

-

- It's more of an answer to the questions like Where should I put this file? or Which file should I put this piece of code into? - rather than just a compilation of example pages and ready to use styles. -

-

- Here's a simplified version of the entire directory structure of the Fuse: -

-
- - - -
-
├─ -
-
└─ -
- - {{node.name}} - -
-
- - - - - {{node.name}} - - -
-
- -

@fuse/

-

- This is the core directory of the Fuse. It includes components, directives, services, pipes, custom validators, animations, base styles and much more. -

-

- Modifications on this directory is NOT recommended. Since majority of changes happen within this directory on updates, any modifications to this - directory and its content will make the updating process complex and time consuming. -

- -

app/

-

- This directory contains all application related codes. This is where you put your code. -

-

- Fuse provides a sensible default directory structure within the app directory. You can of course completely remove everything from it and - design your own structure but the provided structure is designed to handle applications from small to enterprise grade: -

-
- - - -
-
├─ -
-
└─ -
- - {{node.name}} - -
-
- - - - - {{node.name}} - - -
-
- -

app/core/

-

- This directory is designed to contain your application's core; Singleton services, default configurations, default states and likes. It's - NOT recommended to put any components, directives, pipes or simply anything has a template or related to templates in here. -

-

- Example files that can go into this directory includes, but not limited to: -

-
    -
  • -

    Singleton services:

    -

    Auth service

    -

    Logger service

    -

    SplashScreen service

    -
  • -
  • -

    Guards

    -

    Auth guard

    -

    NoAuth guard

    -
  • -
  • -

    Defaults

    -

    Default configurations

    -

    Default state

    -
  • -
  • -

    Custom validators

    -

    Phone number validator

    -

    Confirm validator

    -
  • -
-

and etc...

- -

app/mock-api/

-

- This directory is designed to contain data services for custom made MockAPI library. Detailed information about this directory and the MockAPI library can be found - in the - Core features > Libraries > MockAPI - section of this documentation. -

- - Starter - version of Fuse doesn't include any mock-api services except for the Navigation. - - -

app/layout/

-

- This directory designed to contain everything related to the layout of your app. By default, Fuse provides variety of different layout options for you to use. -

-

- The LayoutComponent is an entry component and it provides an easy way of switching between different layouts. More information about how the - LayoutComponent works can be found in the - Customization > Theme layouts - section of this documentation. -

-

- The app/layout/common/ folder includes common components for layouts such as: -

-
    -
  • Messages
  • -
  • Notifications
  • -
  • Search
  • -
  • Shortcuts
  • -
  • User Menu
  • -
-

- These components are being used across different layouts, so if you use multiple layouts and want to create a component, directive or a pipe for using within your - layouts, you can put them inside the common folder. -

- -

app/modules/

-

- This directory is designed to contain your application's feature modules. -

-

- For example; Authentication related pages such as Sign In, Sign Up, Lost Password and etc. can be grouped into auth/ directory while your - main admin components and modules grouped into admin/ directory. -

-

- If you use SSR (Server Side Rendering) you can even include your landing page as one of the modules and keep everything in a single app. -

- -

app/shared/

-

- This directory is designed to contain anything re-usable such as components, directives and pipes. By default, it doesn't include any of them but when you create - one for your app, you can put it here. -

-

- The only file here is the shared.module.ts file which simply imports and exports some of the common Angular modules so you don't have to import them - one by one. You can just import the shared.module.ts into your module whenever you need one of those common modules. -

-

- Currently it imports and exports: -

-
    -
  • -

    CommonModule

    -

    Required for common directives such as *ngIf and *ngFor

    -
  • -
  • -

    FormsModule

    -

    Required for form directives

    -
  • -
  • -

    ReactiveFormsModule

    -

    Required for reactive form directives

    -
  • -
-

- You can add/remove anything to/from the shared.module.ts file and use the module to import commonly used modules without needing to remember them - one by one. -

- -

assets/

-

- Default Angular assets folder. -

- -

environments/

-

- Default Angular environments folder. -

- -

styles/

-

- This folder contains 4 different scss files: -

-
    -
  • -

    styles.scss

    -

    This file is for adding/importing global styles to the app.

    -
  • -
  • -

    tailwind.scss

    -

    This is the main Tailwind file for Tailwind utilities.

    -
  • -
  • -

    vendors.scss

    -

    - This file is designed to import 3rd party library css/scss files into the project. Any style here can be overridden by styles.scss file - allowing you to overwrite/modify 3rd party library styles and make them visually compatible with your app. -

    -

    - For example, let's say you use FullCalendar 3rd party library. You use the vendors.scss file to import default styles - of the FullCalendar into your project so it looks and works correctly. Then, you can add custom styles to the styles.scss file to overwrite those - default styles to make FullCalendar compatible with your app's design. -

    -
  • -
- - - - -
- -
diff --git a/src/app/modules/admin/docs/guides/development/directory-structure/directory-structure.ts b/src/app/modules/admin/docs/guides/development/directory-structure/directory-structure.ts deleted file mode 100644 index a3be64fb..00000000 --- a/src/app/modules/admin/docs/guides/development/directory-structure/directory-structure.ts +++ /dev/null @@ -1,276 +0,0 @@ -import { Component, OnInit, ViewEncapsulation } from '@angular/core'; -import { MatTreeFlatDataSource, MatTreeFlattener } from '@angular/material/tree'; -import { FlatTreeControl } from '@angular/cdk/tree'; -import { GuidesComponent } from 'app/modules/admin/docs/guides/guides.component'; - -interface DirNode -{ - name: string; - expandable?: boolean; - level?: number; - last?: boolean; - children?: DirNode[]; -} - -interface FlatDirNode -{ - name: string; - expandable: boolean; - level: number; - last: boolean; -} - -@Component({ - selector : 'directory-structure', - templateUrl : './directory-structure.html', - styles : [ - ` - directory-structure .mat-tree { - font-family: "IBM Plex Mono", Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; - } - - directory-structure .mat-tree-node { - min-height: 32px; - } - - directory-structure .mat-tree .mat-icon-button { - width: 32px; - height: 32px; - min-height: 32px; - line-height: 32px; - margin-right: 8px; - } - ` - ], - encapsulation: ViewEncapsulation.None -}) -export class DirectoryStructureComponent implements OnInit -{ - appDir: any; - appTree: any; - generalDir: any; - generalTree: any; - - /** - * Constructor - */ - constructor(private _guidesComponent: GuidesComponent) - { - // App dir - this.appDir = [ - { - name : 'app/', - children: [ - { - name : 'core/', - children: [ - {name: 'auth/'}, - {name: 'config/'}, - {name: 'user/'}, - {name: 'core.module.ts'} - ] - }, - { - name : 'layout/', - children: [ - {name: 'common/'}, - {name: 'layouts/'}, - {name: 'layout.component.html'}, - {name: 'layout.component.scss'}, - {name: 'layout.component.ts'}, - {name: 'layout.module.ts'}, - {name: 'layout.types.ts'} - ] - }, - { - name : 'mock-api/', - children: [ - {name: 'apps/'}, - {name: 'common/'}, - {name: 'dashboards/'}, - {name: 'pages/'}, - {name: 'ui/'}, - {name: 'index.ts'} - ] - }, - { - name : 'modules/', - children: [ - {name: 'admin/'}, - {name: 'auth/'}, - {name: 'landing/'} - ] - }, - { - name : 'shared/', - children: [ - {name: 'shared.module.ts'} - ] - }, - {name: 'app.component.html'}, - {name: 'app.component.scss'}, - {name: 'app.component.ts'}, - {name: 'app.module.ts'}, - {name: 'app.resolvers.ts'}, - {name: 'app.routing.ts'}, - {name: 'app.types.ts'} - ] - } - ]; - - // General dir - this.generalDir = [ - { - name : 'src/', - children: [ - { - name : '@fuse/', - children: [ - {name: 'animations/'}, - {name: 'components/'}, - {name: 'directives/'}, - {name: 'lib/'}, - {name: 'pipes/'}, - {name: 'services/'}, - {name: 'styles/'}, - {name: 'tailwind/'}, - {name: 'validators/'}, - {name: 'version/'}, - {name: 'index.ts'}, - {name: 'fuse.module.ts'} - ] - }, - this.appDir[0], - { - name : 'assets/', - children: [ - {name: 'fonts/'}, - {name: 'icons/'}, - {name: 'images/'}, - {name: 'styles/'} - ] - }, - { - name : 'environments/', - children: [ - {name: 'environment.prod.ts'}, - {name: 'environment.ts'} - ] - }, - { - name : 'styles/', - children: [ - {name: 'styles.scss'}, - {name: 'tailwind.scss'}, - {name: 'vendors.scss'} - ] - }, - {name: 'favicon-16x16.png'}, - {name: 'favicon-32x32.png'}, - {name: 'global.d.ts'}, - {name: 'index.html'}, - {name: 'main.ts'}, - {name: 'polyfills.ts'}, - {name: 'test.ts'} - ] - } - ]; - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - this.appTree = this.createTree(this.appDir); - this.generalTree = this.createTree(this.generalDir); - - // Add 'last:true' to the last child - this.appTree.treeControl.dataNodes.forEach((node: FlatDirNode, index, nodes) => { - nodes[index].last = false; - if ( nodes[index + 1] ) - { - nodes[index].last = nodes[index + 1].level === node.level - 1; - } - else - { - nodes[index].last = true; - } - }); - - this.generalTree.treeControl.dataNodes.forEach((node: FlatDirNode, index, nodes) => { - nodes[index].last = false; - if ( nodes[index + 1] ) - { - nodes[index].last = nodes[index + 1].level === node.level - 1; - } - else - { - nodes[index].last = true; - } - }); - - // Expand the first item - this.appTree.treeControl.expand(this.appTree.treeControl.dataNodes[0]); - this.generalTree.treeControl.expand(this.generalTree.treeControl.dataNodes[0]); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Has child - * - * @param _ - * @param node - */ - hasChild(_: number, node: DirNode): boolean - { - return node.expandable; - } - - /** - * Create a new tree - */ - createTree(data): { dataSource: any, treeControl: any } - { - // Create tree control and mock-api source - const treeControl = new FlatTreeControl(node => node.level, node => node.expandable); - const dataSource = new MatTreeFlatDataSource( - treeControl, - new MatTreeFlattener( - (node: DirNode, level: number) => ({ - expandable: !!node.children && node.children.length > 0, - name : node.name, - level : level - }), - node => node.level, node => node.expandable, node => node.children) - ); - - // Set the mock-api - dataSource.data = data; - - return { - treeControl, - dataSource - }; - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._guidesComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/guides/development/starter-kit/starter-kit.html b/src/app/modules/admin/docs/guides/development/starter-kit/starter-kit.html deleted file mode 100644 index 75c13b63..00000000 --- a/src/app/modules/admin/docs/guides/development/starter-kit/starter-kit.html +++ /dev/null @@ -1,80 +0,0 @@ -
- - -
-
- -
- -
- - Guides -
-
- - Development -
-
- -
-

- Starter Kit -

-
-
- -
- -
- -

- Starter kit is the bare minimum version of the Fuse. All the Demo applications and pages are stripped from it and includes only the essential components and - modules for you to start building your app. -

-

- It's strongly recommended that you build your app on top of the Starter kit rather then the Demo. Demo includes lots of - sample content and some of them would never be used together (like multiple Pricing page designs, multiple Auth page designs etc.) which can slow down your app a - lot more than usual. -

- - - - -
- -
diff --git a/src/app/modules/admin/docs/guides/development/starter-kit/starter-kit.ts b/src/app/modules/admin/docs/guides/development/starter-kit/starter-kit.ts deleted file mode 100644 index 51c714f3..00000000 --- a/src/app/modules/admin/docs/guides/development/starter-kit/starter-kit.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from '@angular/core'; -import { GuidesComponent } from 'app/modules/admin/docs/guides/guides.component'; - -@Component({ - selector : 'starter-kit', - templateUrl: './starter-kit.html', - styles : [''] -}) -export class StarterKitComponent -{ - /** - * Constructor - */ - constructor(private _guidesComponent: GuidesComponent) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._guidesComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/guides/development/updating/updating.html b/src/app/modules/admin/docs/guides/development/updating/updating.html deleted file mode 100644 index 63f986ea..00000000 --- a/src/app/modules/admin/docs/guides/development/updating/updating.html +++ /dev/null @@ -1,95 +0,0 @@ -
- - -
-
- -
- -
- - Guides -
-
- - Development -
-
- -
-

- Updating -

-
-
- -
- -
- -

- Since Fuse is built as a Starter kit and an Admin template, there is no easy or a set way of updating it like a normal library. Though - it's completely up to you to keep the Fuse updated, there are two key points that might help you with the task: -

-
    -
  • -

    - Do NOT touch the @fuse folder unless you absolutely have to. Keeping that folder intact is the key to have easier - upgrades. -

    -
  • -
  • -

    - Fork the original Fuse repo from its Github and build on top of that. That way, you can merge the changes from the origin repo as updates released. -

    -
  • -
-

- If you follow these two rules, it will make the updating process a little bit more easier. -

-

- The best way of updating Fuse is to compare the latest version with your version using Github's compare feature. After that, you can either manually patch your - setup or merge (and resolve conflicts) through Github. Every release is tagged and available under the Releases tab of Fuse's Github repo. -

- - - - -
- -
diff --git a/src/app/modules/admin/docs/guides/development/updating/updating.ts b/src/app/modules/admin/docs/guides/development/updating/updating.ts deleted file mode 100644 index a7bfb3d5..00000000 --- a/src/app/modules/admin/docs/guides/development/updating/updating.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from '@angular/core'; -import { GuidesComponent } from 'app/modules/admin/docs/guides/guides.component'; - -@Component({ - selector : 'updating', - templateUrl: './updating.html', - styles : [''] -}) -export class UpdatingComponent -{ - /** - * Constructor - */ - constructor(private _guidesComponent: GuidesComponent) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._guidesComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/guides/getting-started/installation/installation.html b/src/app/modules/admin/docs/guides/getting-started/installation/installation.html deleted file mode 100644 index 01f12353..00000000 --- a/src/app/modules/admin/docs/guides/getting-started/installation/installation.html +++ /dev/null @@ -1,153 +0,0 @@ -
- - -
-
- -
- -
- - Guides -
-
- - Getting Started -
-
- -
-

- Installation -

-
-
- -
- -
- -

- Before you begin installing Fuse, prepare a folder where you can unzip the downloaded .zip file. -

- -

1. Choose which version you want to install

-

- When you unzip the .zip file you have downloaded from Themeforest, you will find 2 additional .zip files along with other files. One of those .zip files is the - Demo version, and the other one is the Starter version: -

-
    -
  • -

    - Demo fuse-demo-vX.X.X.zip -

    -

    - This .zip file includes the Demo version which includes all the applications, pages and UI sections from the Demo application. This version is for referencing - purposes only and it should be only used for copying code/modules from it. -

    -

    - Do NOT use the Demo version to build your app, otherwise you will have a lot of unnecessary weight to your app right from the start and it - will provide a poor development experience. -

    -
  • -
  • -

    - Starter fuse-starter-vX.X.X.zip -

    -

    - This .zip file includes the Starter version which includes all the core components and functionality of Fuse without the Demo applications, - pages and UI sections. DO use the Starter version to build your app on top. -

    -
  • -
- -

2. Unzip

-

- After choosing the version you want to install, unzip the .zip file of that version into your workspace directory. -

- -
-

- You can completely skip the steps #1 and #2 and instead fork the project from Fuse's Github repo directly. This will not only - make things simpler, but it will also make any future updates easier as you can merge the changes from the original repo into your fork. -

-

- For more information and to access Fuse's Github repo, check out the Fuse's Themeforest description page. -

-
-
- -

3. Run the installation command

-

- Open a console/terminal window and navigate into your workspace directory. You must be at the same folder with the package.json file in order to run - the commands. -

-

- To complete the installation, enter the following command: -

- -

- This command will take some time and install all the required libraries into the node_modules directory in order for you to start developing. -

- -
-

- After the installation completes, you may see warnings about deprecated packages and security risks. You can safely ignore those messages as Fuse (and other - Angular apps) use Node.js for only development environment. -

-

- Unless you explicitly add a package to your dependencies list in package.json file, they won't be included into the final application - therefore they are not going cause any security risks. -

-
-
- - - - -
- -
diff --git a/src/app/modules/admin/docs/guides/getting-started/installation/installation.ts b/src/app/modules/admin/docs/guides/getting-started/installation/installation.ts deleted file mode 100644 index b892245b..00000000 --- a/src/app/modules/admin/docs/guides/getting-started/installation/installation.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from '@angular/core'; -import { GuidesComponent } from 'app/modules/admin/docs/guides/guides.component'; - -@Component({ - selector : 'installation', - templateUrl: './installation.html', - styles : [''] -}) -export class InstallationComponent -{ - /** - * Constructor - */ - constructor(private _guidesComponent: GuidesComponent) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._guidesComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/guides/getting-started/introduction/introduction.html b/src/app/modules/admin/docs/guides/getting-started/introduction/introduction.html deleted file mode 100644 index fa567e52..00000000 --- a/src/app/modules/admin/docs/guides/getting-started/introduction/introduction.html +++ /dev/null @@ -1,105 +0,0 @@ -
- - -
-
- -
- -
- - Guides -
-
- - Getting Started -
-
- -
-

- Introduction -

-
-
- -
- -
- -

Thank you for choosing Fuse.

-

- Fuse is a multi-purpose, multi-layout Angular admin template featuring custom made Application and Page layouts, UI elements and UX best practices. -

-

- In this documentation, you will find starter guides and API documentation of the custom made Fuse components. -

- -
-

Main libraries

-

- Fuse powered by 3 main libraries; Angular, Angular Material and TailwindCSS: -

-
    -
  • - Angular - -

    - It is the core of the Fuse. This version only works with Angular. -

    -
  • -
  • - Angular Material - -

    - Provides the main UI components such as Buttons, Form fields, Tabs, Progress bars and more. -

    -
  • -
  • - TailwindCSS - -

    - It is the core of the style configuration and it provides utility classes for almost every CSS rule available. -

    -
  • -
- - - - -
- -
diff --git a/src/app/modules/admin/docs/guides/getting-started/introduction/introduction.ts b/src/app/modules/admin/docs/guides/getting-started/introduction/introduction.ts deleted file mode 100644 index 05d3c4d1..00000000 --- a/src/app/modules/admin/docs/guides/getting-started/introduction/introduction.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from '@angular/core'; -import { GuidesComponent } from 'app/modules/admin/docs/guides/guides.component'; - -@Component({ - selector : 'introduction', - templateUrl: './introduction.html', - styles : [''] -}) -export class IntroductionComponent -{ - /** - * Constructor - */ - constructor(private _guidesComponent: GuidesComponent) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._guidesComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/guides/getting-started/prerequisites/prerequisites.html b/src/app/modules/admin/docs/guides/getting-started/prerequisites/prerequisites.html deleted file mode 100644 index 4af602f8..00000000 --- a/src/app/modules/admin/docs/guides/getting-started/prerequisites/prerequisites.html +++ /dev/null @@ -1,111 +0,0 @@ -
- - -
-
- -
- -
- - Guides -
-
- - Getting Started -
-
- -
-

- Prerequisites -

-
-
- -
- -
- -

- Before you begin developing with Fuse, make sure your development environment includes Node.js, npm and Angular CLI. -

- -

1. Node.js

-

- To install Node.js, go to - Node.js - - and install the active LTS version. -

- -

2. npm

-

- To download and install npm packages, you must have the npm package manager. This guide uses the npm client command line interface, which is installed with Node.js - by default. To check that you have the npm client installed, run npm -v in a terminal/console window. -

- -

3. Angular CLI

-

- You will use the - Angular CLI - - to create projects, generate application and library code, and perform a variety of ongoing development tasks - such as testing, bundling, and deployment. -

-

- To install the CLI using npm, open a terminal/console window and enter the following command: -

- - - - - -
- -
diff --git a/src/app/modules/admin/docs/guides/getting-started/prerequisites/prerequisites.ts b/src/app/modules/admin/docs/guides/getting-started/prerequisites/prerequisites.ts deleted file mode 100644 index 64c3bda4..00000000 --- a/src/app/modules/admin/docs/guides/getting-started/prerequisites/prerequisites.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from '@angular/core'; -import { GuidesComponent } from 'app/modules/admin/docs/guides/guides.component'; - -@Component({ - selector : 'prerequisites', - templateUrl: './prerequisites.html', - styles : [''] -}) -export class PrerequisitesComponent -{ - /** - * Constructor - */ - constructor(private _guidesComponent: GuidesComponent) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._guidesComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/guides/getting-started/serving/serving.html b/src/app/modules/admin/docs/guides/getting-started/serving/serving.html deleted file mode 100644 index 94479a6f..00000000 --- a/src/app/modules/admin/docs/guides/getting-started/serving/serving.html +++ /dev/null @@ -1,102 +0,0 @@ -
- - -
-
- -
- -
- - Guides -
-
- - Getting Started -
-
- -
-

- Serving -

-
-
- -
- -
- - -

- After the installation process finishes, run the following command while still in your workspace directory: -

- -

- The ng serve command launches the server, watches your files, and rebuilds the app as you make changes to those files. -

-

- The --open (or just -o) option automatically opens your browser to http://localhost:4200/. -

- -

Alternate command

- -

- Alias for ng serve --open. -

- -

- If you are getting error messages that includes keywords like HEAP, JS stack tree, - out of memory while trying to run ng serve --open or npm start commands, - you may have an older Node.js version, try updating your Node.js to the latest LTS version and then try again. -

- - - - -
- -
diff --git a/src/app/modules/admin/docs/guides/getting-started/serving/serving.ts b/src/app/modules/admin/docs/guides/getting-started/serving/serving.ts deleted file mode 100644 index a1d8630d..00000000 --- a/src/app/modules/admin/docs/guides/getting-started/serving/serving.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from '@angular/core'; -import { GuidesComponent } from 'app/modules/admin/docs/guides/guides.component'; - -@Component({ - selector : 'serving', - templateUrl: './serving.html', - styles : [''] -}) -export class ServingComponent -{ - /** - * Constructor - */ - constructor(private _guidesComponent: GuidesComponent) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._guidesComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/guides/guides.component.html b/src/app/modules/admin/docs/guides/guides.component.html deleted file mode 100644 index e0b82370..00000000 --- a/src/app/modules/admin/docs/guides/guides.component.html +++ /dev/null @@ -1,38 +0,0 @@ -
- - - - - - - - - - - - - - -
- -
- -
- -
- -
- - diff --git a/src/app/modules/admin/docs/guides/guides.component.scss b/src/app/modules/admin/docs/guides/guides.component.scss deleted file mode 100644 index f114c6ec..00000000 --- a/src/app/modules/admin/docs/guides/guides.component.scss +++ /dev/null @@ -1,9 +0,0 @@ -guides { - - fuse-vertical-navigation { - - .fuse-vertical-navigation-wrapper { - box-shadow: none !important; - } - } -} diff --git a/src/app/modules/admin/docs/guides/guides.component.ts b/src/app/modules/admin/docs/guides/guides.component.ts deleted file mode 100644 index f55bd65d..00000000 --- a/src/app/modules/admin/docs/guides/guides.component.ts +++ /dev/null @@ -1,199 +0,0 @@ -import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; -import { MatDrawer } from '@angular/material/sidenav'; -import { FuseNavigationItem } from '@fuse/components/navigation'; -import { takeUntil } from 'rxjs/operators'; -import { FuseMediaWatcherService } from '@fuse/services/media-watcher'; -import { Subject } from 'rxjs'; - -@Component({ - selector : 'guides', - templateUrl : './guides.component.html', - styleUrls : ['./guides.component.scss'], - encapsulation : ViewEncapsulation.None, - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class GuidesComponent implements OnInit, OnDestroy -{ - @ViewChild('matDrawer', {static: true}) matDrawer: MatDrawer; - drawerMode: 'side' | 'over'; - drawerOpened: boolean; - menuData: FuseNavigationItem[]; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor( - private _changeDetectorRef: ChangeDetectorRef, - private _fuseMediaWatcherService: FuseMediaWatcherService - ) - { - this.menuData = [ - { - id : 'getting-started', - title : 'Getting started', - type : 'group', - children: [ - { - id : 'getting-started.introduction', - title: 'Introduction', - type : 'basic', - link : '/docs/guides/getting-started/introduction' - }, - { - id : 'getting-started.prerequisites', - title: 'Prerequisites', - type : 'basic', - link : '/docs/guides/getting-started/prerequisites' - }, - { - id : 'getting-started.installation', - title: 'Installation', - type : 'basic', - link : '/docs/guides/getting-started/installation' - }, - { - id : 'getting-started.serving', - title: 'Serving', - type : 'basic', - link : '/docs/guides/getting-started/serving' - } - ] - }, - { - id : 'development', - title : 'Development', - type : 'group', - children: [ - { - id : 'development.directory-structure', - title: 'Directory structure', - type : 'basic', - link : '/docs/guides/development/directory-structure' - }, - { - id : 'development.component-structure', - title: 'Component structure', - type : 'basic', - link : '/docs/guides/development/component-structure' - }, - { - id : 'development.starter-kit', - title: 'Starter kit', - type : 'basic', - link : '/docs/guides/development/starter-kit' - }, - { - id : 'development.deployment', - title: 'Deployment', - type : 'basic', - link : '/docs/guides/development/deployment' - }, - { - id : 'development.updating', - title: 'Updating', - type : 'basic', - link : '/docs/guides/development/updating' - } - ] - }, - { - id : 'customization', - title : 'Customization', - type : 'group', - children: [ - { - id : 'customization.theme-layouts', - title: 'Theme layouts', - type : 'basic', - link : '/docs/guides/customization/theme-layouts' - }, - { - id : 'customization.page-layouts', - title: 'Page layouts', - type : 'basic', - link : '/docs/guides/customization/page-layouts' - }, - { - id : 'customization.tailwindcss', - title: 'TailwindCSS', - type : 'basic', - link : '/docs/guides/customization/tailwindcss' - }, - { - id : 'customization.theming', - title: 'Theming', - type : 'basic', - link : '/docs/guides/customization/theming' - }, - { - id : 'customization.component-theming', - title: 'Component theming', - type : 'basic', - link : '/docs/guides/customization/component-theming' - }, - { - id : 'customization.splash-screen', - title: 'Splash screen', - type : 'basic', - link : '/docs/guides/customization/splash-screen' - } - ] - }, - { - id : 'authentication', - title : 'Authentication', - type : 'group', - children: [ - { - id : 'authentication.jwt', - title: 'JWT', - type : 'basic', - link : '/docs/guides/authentication/jwt' - } - ] - } - ]; - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Subscribe to media query change - this._fuseMediaWatcherService.onMediaChange$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe(({matchingAliases}) => { - - // Set the drawerMode and drawerOpened - if ( matchingAliases.includes('md') ) - { - this.drawerMode = 'side'; - this.drawerOpened = true; - } - else - { - this.drawerMode = 'over'; - this.drawerOpened = false; - } - - // Mark for check - this._changeDetectorRef.markForCheck(); - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } -} diff --git a/src/app/modules/admin/docs/guides/guides.module.ts b/src/app/modules/admin/docs/guides/guides.module.ts deleted file mode 100644 index c4d9c2dc..00000000 --- a/src/app/modules/admin/docs/guides/guides.module.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { MatButtonModule } from '@angular/material/button'; -import { MatIconModule } from '@angular/material/icon'; -import { MatSidenavModule } from '@angular/material/sidenav'; -import { MatTreeModule } from '@angular/material/tree'; -import { FuseHighlightModule } from '@fuse/components/highlight'; -import { FuseAlertModule } from '@fuse/components/alert'; -import { FuseNavigationModule } from '@fuse/components/navigation'; -import { FuseScrollResetModule } from '@fuse/directives/scroll-reset'; -import { SharedModule } from 'app/shared/shared.module'; -import { GuidesComponent } from 'app/modules/admin/docs/guides/guides.component'; -import { IntroductionComponent } from 'app/modules/admin/docs/guides/getting-started/introduction/introduction'; -import { PrerequisitesComponent } from 'app/modules/admin/docs/guides/getting-started/prerequisites/prerequisites'; -import { InstallationComponent } from 'app/modules/admin/docs/guides/getting-started/installation/installation'; -import { ServingComponent } from 'app/modules/admin/docs/guides/getting-started/serving/serving'; -import { DirectoryStructureComponent } from 'app/modules/admin/docs/guides/development/directory-structure/directory-structure'; -import { ComponentStructureComponent } from 'app/modules/admin/docs/guides/development/component-structure/component-structure'; -import { StarterKitComponent } from 'app/modules/admin/docs/guides/development/starter-kit/starter-kit'; -import { DeploymentComponent } from 'app/modules/admin/docs/guides/development/deployment/deployment'; -import { UpdatingComponent } from 'app/modules/admin/docs/guides/development/updating/updating'; -import { ThemeLayoutsComponent } from 'app/modules/admin/docs/guides/customization/theme-layouts/theme-layouts'; -import { PageLayoutsComponent } from 'app/modules/admin/docs/guides/customization/page-layouts/page-layouts'; -import { TailwindCSSComponent } from 'app/modules/admin/docs/guides/customization/tailwindcss/tailwindcss'; -import { ThemingComponent } from 'app/modules/admin/docs/guides/customization/theming/theming'; -import { ComponentThemingComponent } from 'app/modules/admin/docs/guides/customization/component-theming/component-theming'; -import { SplashScreenCustomizationComponent } from 'app/modules/admin/docs/guides/customization/splash-screen/splash-screen'; -import { JwtComponent } from 'app/modules/admin/docs/guides/authentication/jwt/jwt'; -import { guidesRoutes } from 'app/modules/admin/docs/guides/guides.routing'; - -@NgModule({ - declarations: [ - GuidesComponent, - IntroductionComponent, - PrerequisitesComponent, - InstallationComponent, - ServingComponent, - DirectoryStructureComponent, - ComponentStructureComponent, - StarterKitComponent, - DeploymentComponent, - UpdatingComponent, - ThemeLayoutsComponent, - PageLayoutsComponent, - TailwindCSSComponent, - ThemingComponent, - ComponentThemingComponent, - SplashScreenCustomizationComponent, - JwtComponent - ], - imports : [ - RouterModule.forChild(guidesRoutes), - MatButtonModule, - MatIconModule, - MatSidenavModule, - MatTreeModule, - FuseHighlightModule, - FuseAlertModule, - FuseNavigationModule, - FuseScrollResetModule, - SharedModule - ] -}) -export class GuidesModule -{ -} diff --git a/src/app/modules/admin/docs/guides/guides.routing.ts b/src/app/modules/admin/docs/guides/guides.routing.ts deleted file mode 100644 index a9fc313b..00000000 --- a/src/app/modules/admin/docs/guides/guides.routing.ts +++ /dev/null @@ -1,136 +0,0 @@ -import { Route } from '@angular/router'; -import { GuidesComponent } from 'app/modules/admin/docs/guides/guides.component'; -import { IntroductionComponent } from 'app/modules/admin/docs/guides/getting-started/introduction/introduction'; -import { PrerequisitesComponent } from 'app/modules/admin/docs/guides/getting-started/prerequisites/prerequisites'; -import { InstallationComponent } from 'app/modules/admin/docs/guides/getting-started/installation/installation'; -import { ServingComponent } from 'app/modules/admin/docs/guides/getting-started/serving/serving'; -import { DirectoryStructureComponent } from 'app/modules/admin/docs/guides/development/directory-structure/directory-structure'; -import { ComponentStructureComponent } from 'app/modules/admin/docs/guides/development/component-structure/component-structure'; -import { StarterKitComponent } from 'app/modules/admin/docs/guides/development/starter-kit/starter-kit'; -import { DeploymentComponent } from 'app/modules/admin/docs/guides/development/deployment/deployment'; -import { UpdatingComponent } from 'app/modules/admin/docs/guides/development/updating/updating'; -import { ThemeLayoutsComponent } from 'app/modules/admin/docs/guides/customization/theme-layouts/theme-layouts'; -import { PageLayoutsComponent } from 'app/modules/admin/docs/guides/customization/page-layouts/page-layouts'; -import { TailwindCSSComponent } from 'app/modules/admin/docs/guides/customization/tailwindcss/tailwindcss'; -import { ThemingComponent } from 'app/modules/admin/docs/guides/customization/theming/theming'; -import { ComponentThemingComponent } from 'app/modules/admin/docs/guides/customization/component-theming/component-theming'; -import { SplashScreenCustomizationComponent } from 'app/modules/admin/docs/guides/customization/splash-screen/splash-screen'; -import { JwtComponent } from 'app/modules/admin/docs/guides/authentication/jwt/jwt'; - -export const guidesRoutes: Route[] = [ - { - path : '', - component: GuidesComponent, - children : [ - { - path : '', - pathMatch : 'full', - redirectTo: 'getting-started' - }, - { - path : 'getting-started', - children: [ - { - path : '', - pathMatch : 'full', - redirectTo: 'introduction' - }, - { - path : 'introduction', - component: IntroductionComponent - }, - { - path : 'prerequisites', - component: PrerequisitesComponent - }, - { - path : 'installation', - component: InstallationComponent - }, - { - path : 'serving', - component: ServingComponent - } - ] - }, - { - path : 'development', - children: [ - { - path : '', - pathMatch : 'full', - redirectTo: 'structure' - }, - { - path : 'directory-structure', - component: DirectoryStructureComponent - }, - { - path : 'component-structure', - component: ComponentStructureComponent - }, - { - path : 'starter-kit', - component: StarterKitComponent - }, - { - path : 'deployment', - component: DeploymentComponent - }, - { - path : 'updating', - component: UpdatingComponent - } - ] - }, - { - path : 'customization', - children: [ - { - path : '', - pathMatch : 'full', - redirectTo: 'theme-layouts' - }, - { - path : 'theme-layouts', - component: ThemeLayoutsComponent - }, - { - path : 'page-layouts', - component: PageLayoutsComponent - }, - { - path : 'tailwindcss', - component: TailwindCSSComponent - }, - { - path : 'theming', - component: ThemingComponent - }, - { - path : 'component-theming', - component: ComponentThemingComponent - }, - { - path : 'splash-screen', - component: SplashScreenCustomizationComponent - } - ] - }, - { - path : 'authentication', - children: [ - { - path : '', - pathMatch : 'full', - redirectTo: 'jwt' - }, - { - path : 'jwt', - component: JwtComponent - } - ] - } - ] - } -]; diff --git a/src/app/modules/admin/docs/other-components/common/messages/messages.component.html b/src/app/modules/admin/docs/other-components/common/messages/messages.component.html deleted file mode 100644 index 51cc7ba7..00000000 --- a/src/app/modules/admin/docs/other-components/common/messages/messages.component.html +++ /dev/null @@ -1,229 +0,0 @@ -
- - -
-
- -
- - -
- - Common -
-
- -
-

- Messages -

-
-
- -
- -
- -

- This component can be used to show latest messages in a custom made panel. These messages can be either system wide messages or messages that sent to the currently - logged in user from other users. -

-

- It has some basic features including -

-
    -
  • marking all messages as read
  • -
  • marking individual messages as read
  • -
  • removing individual messages from the list
  • -
- -

Usage

-

- The component only has one input to supply the messages: -

- - -

Message

- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription
-
id
-
- Unique id of the message. -
-
icon
-
- Icon name for the message. -
-
image
-
- Image for the message. -
-
title
-
- Title of the message. -
-
description
-
- Description of the message. -
-
time
-
- String representation of the time of the message (like ISO string). -
-
link
-
- Link of the message. -
-
useRouter
-
- Whether to use the Router to parse the link. -
-
read
-
- Whether the message marked as read. -
-
- -

Messages Service

-

- The MessagesService can be used to control the messages outside of the Messages component. This is particularly useful to control the - messages from other components for actions like creating, updating or deleting them. -

- -

Methods

-

- Here's the list of all available methods from MessagesService: -

-
-
- messages$: Observable<Message[]> -
-
- Getter for messages. -
-
-
-
- store(messages: Message[]) -
-
- Store messages on the service. This will replace the current messages and can be used as an alternative to messages input of the - component. -
-
-
-
- create(message: Message): Observable<Messages> -
-
- Create a new message on the server. -
-
-
-
- update(id: string, message: Message): Observable<Message> -
-
- Update the message on the server. -
-
-
-
- delete(id: string): Observable<boolean> -
-
- Delete the message on the server. -
-
-
-
- markAllAsRead(): Observable<boolean> -
-
- Mark all messages as read. -
-
- -
- -
diff --git a/src/app/modules/admin/docs/other-components/common/messages/messages.component.ts b/src/app/modules/admin/docs/other-components/common/messages/messages.component.ts deleted file mode 100644 index a013450d..00000000 --- a/src/app/modules/admin/docs/other-components/common/messages/messages.component.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from '@angular/core'; -import { OtherComponentsComponent } from 'app/modules/admin/docs/other-components/other-components.component'; - -@Component({ - selector : 'messages', - templateUrl: './messages.component.html', - styles : [''] -}) -export class MessagesComponent -{ - /** - * Constructor - */ - constructor(private _otherComponentsComponent: OtherComponentsComponent) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._otherComponentsComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/other-components/common/notifications/notifications.component.html b/src/app/modules/admin/docs/other-components/common/notifications/notifications.component.html deleted file mode 100644 index 6986ed7c..00000000 --- a/src/app/modules/admin/docs/other-components/common/notifications/notifications.component.html +++ /dev/null @@ -1,229 +0,0 @@ -
- - -
-
- -
- - -
- - Common -
-
- -
-

- Notifications -

-
-
- -
- -
- -

- This component can be used to show latest notifications in a custom made panel. These notifications can be either system wide or applications that sent to the - currently logged in user from other users. -

-

- It has some basic features including -

-
    -
  • marking all notification as read
  • -
  • marking individual notifications as read
  • -
  • removing individual notifications from the list
  • -
- -

Usage

-

- The component only has one input to supply the notifications: -

- - -

Notification

- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription
-
id
-
- Unique id of the notification. -
-
icon
-
- Icon name for the notification. -
-
image
-
- Image for the notification. -
-
title
-
- Title of the notification. -
-
description
-
- Description of the notification. -
-
time
-
- String representation of the time of the notification (like ISO string). -
-
link
-
- Link of the notification. -
-
useRouter
-
- Whether to use the Router to parse the link. -
-
read
-
- Whether the notification marked as read. -
-
- -

Notifications Service

-

- The NotificationsService can be used to control the notifications outside of the Notifications component. This is particularly useful - to control the notifications from other components for actions like creating, updating or deleting them. -

- -

Methods

-

- Here's the list of all available methods from NotificationsService: -

-
-
- notifications$: Observable<Notification[]> -
-
- Getter for notifications. -
-
-
-
- store(notifications: Notification[]) -
-
- Store notifications on the service. This will replace the current notifications and can be used as an alternative to notifications input of the - component. -
-
-
-
- create(notification: Notification): Observable<Notifications> -
-
- Create a new notification on the server. -
-
-
-
- update(id: string, notification: Notification): Observable<Notification> -
-
- Update the notification on the server. -
-
-
-
- delete(id: string): Observable<boolean> -
-
- Delete the notification on the server. -
-
-
-
- markAllAsRead(): Observable<boolean> -
-
- Mark all notifications as read. -
-
- -
- -
diff --git a/src/app/modules/admin/docs/other-components/common/notifications/notifications.component.ts b/src/app/modules/admin/docs/other-components/common/notifications/notifications.component.ts deleted file mode 100644 index 7c7d32f1..00000000 --- a/src/app/modules/admin/docs/other-components/common/notifications/notifications.component.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from '@angular/core'; -import { OtherComponentsComponent } from 'app/modules/admin/docs/other-components/other-components.component'; - -@Component({ - selector : 'notifications', - templateUrl: './notifications.component.html', - styles : [''] -}) -export class NotificationsComponent -{ - /** - * Constructor - */ - constructor(private _otherComponentsComponent: OtherComponentsComponent) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._otherComponentsComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/other-components/common/overview/overview.component.html b/src/app/modules/admin/docs/other-components/common/overview/overview.component.html deleted file mode 100644 index 045af4c2..00000000 --- a/src/app/modules/admin/docs/other-components/common/overview/overview.component.html +++ /dev/null @@ -1,86 +0,0 @@ -
- - -
-
- -
- - -
- - Common -
-
- -
-

- Overview -

-
-
- -
- -
- -

- Common components are custom made components that could require heavy modifications depending on the project. These components are mostly related with the layout - therefore they are located in the src/app/layout/common/ directory. You can modify them without touching the @fuse directory. -

- - These components are not very complex and they only provide some basic features. If you wish them to do more, you have to customize them, and that's exactly why - they are not located in the @fuse directory like other components. - - - We may add more features and more custom components in the future if they will be beneficial for everyone. Components that are too specific to a project won't be - included as custom components into Fuse! - -

- Currently, there are five common components; -

-
    -
  • -

    Messages

    -

    A panel to show latest messages.

    -
  • -
  • -

    Notifications

    -

    A panel to show latest notifications.

    -
  • -
  • -

    Search

    -

    An autocomplete search box with proper API endpoint setup.

    -
  • -
  • -

    Shortcuts

    -

    A user customizable panel to show shortcuts to internal/external pages.

    -
  • -
  • -

    User Menu

    -

    A user avatar and menu component to show user related information and actions.

    -
  • -
- -
- -
diff --git a/src/app/modules/admin/docs/other-components/common/overview/overview.component.ts b/src/app/modules/admin/docs/other-components/common/overview/overview.component.ts deleted file mode 100644 index 2a34e7f3..00000000 --- a/src/app/modules/admin/docs/other-components/common/overview/overview.component.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from '@angular/core'; -import { OtherComponentsComponent } from 'app/modules/admin/docs/other-components/other-components.component'; - -@Component({ - selector : 'overview', - templateUrl: './overview.component.html', - styles : [''] -}) -export class OverviewComponent -{ - /** - * Constructor - */ - constructor(private _otherComponentsComponent: OtherComponentsComponent) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._otherComponentsComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/other-components/common/search/search.component.html b/src/app/modules/admin/docs/other-components/common/search/search.component.html deleted file mode 100644 index 56a79ec7..00000000 --- a/src/app/modules/admin/docs/other-components/common/search/search.component.html +++ /dev/null @@ -1,122 +0,0 @@ -
- - -
-
- -
- - -
- - Common -
-
- -
-

- Search -

-
-
- -
- -
- -

- This component can be used for searching. It will make API calls as you start typing the search query into the search field and show the results in the - Autocomplete panel. -

- -

Usage

-

- Here's the basic usage of the component: -

- - -

Properties

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionDefault
-
@Input()
-
appearance: 'basic' | 'bar'
-
- Appearance of the search. basic will show a simple search field. bar will show a dropdown bar that covers the - header. - - bar -
-
@Input()
-
debounce: number
-
- Number of milliseconds to debounce the API calls. - - 300 -
-
@Input()
-
minLength: number
-
- Minimum length of the search value required before making API calls. - - 2 -
-
@Output()
-
search: EventEmitter
-
- An event emitted after search happened. - - - -
-
- -
- -
diff --git a/src/app/modules/admin/docs/other-components/common/search/search.component.ts b/src/app/modules/admin/docs/other-components/common/search/search.component.ts deleted file mode 100644 index 8fc1b0fe..00000000 --- a/src/app/modules/admin/docs/other-components/common/search/search.component.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from '@angular/core'; -import { OtherComponentsComponent } from 'app/modules/admin/docs/other-components/other-components.component'; - -@Component({ - selector : 'search', - templateUrl: './search.component.html', - styles : [''] -}) -export class SearchComponent -{ - /** - * Constructor - */ - constructor(private _otherComponentsComponent: OtherComponentsComponent) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._otherComponentsComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/other-components/common/shortcuts/shortcuts.component.html b/src/app/modules/admin/docs/other-components/common/shortcuts/shortcuts.component.html deleted file mode 100644 index b07ae59d..00000000 --- a/src/app/modules/admin/docs/other-components/common/shortcuts/shortcuts.component.html +++ /dev/null @@ -1,186 +0,0 @@ -
- - -
-
- -
- - -
- - Common -
-
- -
-

- Shortcuts -

-
-
- -
- -
- -

- This component can be used to show shortcuts to applications, pages or external sources. It can be controlled by the user and any changes will be persisted to the - backend if setup correctly. -

- -

Usage

-

- The component only has one input to supply the shortcuts: -

- - -

Message

- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription
-
id
-
- Unique id of the shortcut. -
-
label
-
- Label of the shortcut. -
-
description
-
- Description of the shortcut. -
-
icon
-
- Icon name for the shortcut. -
-
link
-
- Link of the shortcut. -
-
useRouter
-
- Whether to use the Router to parse the link. -
-
- -

Shortcuts Service

-

- The ShortcutsService can be used to control the shortcuts outside of the Shortcuts component. This is particularly useful to control - the shortcuts from other components for actions like creating, updating or deleting them. -

- -

Methods

-

- Here's the list of all available methods from ShortcutsService: -

-
-
- shortcuts$: Observable<Shortcut[]> -
-
- Getter for shortcuts. -
-
-
-
- store(shortcuts: Shortcut[]) -
-
- Store shortcuts on the service. This will replace the current shortcuts and can be used as an alternative to shortcuts input of the - component. -
-
-
-
- create(shortcut: Shortcut): Observable<Shortcuts> -
-
- Create a new shortcut on the server. -
-
-
-
- update(id: string, shortcut: Shortcut): Observable<Shortcut> -
-
- Update the shortcut on the server. -
-
-
-
- delete(id: string): Observable<boolean> -
-
- Delete the shortcut on the server. -
-
- -
- -
diff --git a/src/app/modules/admin/docs/other-components/common/shortcuts/shortcuts.component.ts b/src/app/modules/admin/docs/other-components/common/shortcuts/shortcuts.component.ts deleted file mode 100644 index 7303f7d6..00000000 --- a/src/app/modules/admin/docs/other-components/common/shortcuts/shortcuts.component.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from '@angular/core'; -import { OtherComponentsComponent } from 'app/modules/admin/docs/other-components/other-components.component'; - -@Component({ - selector : 'shortcuts', - templateUrl: './shortcuts.component.html', - styles : [''] -}) -export class ShortcutsComponent -{ - /** - * Constructor - */ - constructor(private _otherComponentsComponent: OtherComponentsComponent) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._otherComponentsComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/other-components/common/user-menu/user-menu.component.html b/src/app/modules/admin/docs/other-components/common/user-menu/user-menu.component.html deleted file mode 100644 index 751a6046..00000000 --- a/src/app/modules/admin/docs/other-components/common/user-menu/user-menu.component.html +++ /dev/null @@ -1,96 +0,0 @@ -
- - -
-
- -
- - -
- - Common -
-
- -
-

- User Menu -

-
-
- -
- -
- -

- This component can be used for showing information and actions related to the currently logged in user. -

- -

Usage

-

- Here's the basic usage of the component: -

- - -

Properties

-
- - - - - - - - - - - - - - - - - - - - -
NameDescriptionDefault
-
@Input()
-
showAvatar: boolean
-
- Whether to show avatar of the user. If set to false, a generic icon will be shown. - - true -
-
@Input()
-
user: User
-
- The user data. - - - -
-
- -
- -
diff --git a/src/app/modules/admin/docs/other-components/common/user-menu/user-menu.component.ts b/src/app/modules/admin/docs/other-components/common/user-menu/user-menu.component.ts deleted file mode 100644 index 5b1cd108..00000000 --- a/src/app/modules/admin/docs/other-components/common/user-menu/user-menu.component.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from '@angular/core'; -import { OtherComponentsComponent } from 'app/modules/admin/docs/other-components/other-components.component'; - -@Component({ - selector : 'user-menu', - templateUrl: './user-menu.component.html', - styles : [''] -}) -export class UserMenuComponent -{ - /** - * Constructor - */ - constructor(private _otherComponentsComponent: OtherComponentsComponent) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._otherComponentsComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/other-components/other-components.component.html b/src/app/modules/admin/docs/other-components/other-components.component.html deleted file mode 100644 index 1f63e296..00000000 --- a/src/app/modules/admin/docs/other-components/other-components.component.html +++ /dev/null @@ -1,38 +0,0 @@ -
- - - - - - - - - - - - - - -
- -
- -
- -
- -
- - diff --git a/src/app/modules/admin/docs/other-components/other-components.component.scss b/src/app/modules/admin/docs/other-components/other-components.component.scss deleted file mode 100644 index 770127c2..00000000 --- a/src/app/modules/admin/docs/other-components/other-components.component.scss +++ /dev/null @@ -1,9 +0,0 @@ -other-components { - - fuse-vertical-navigation { - - .fuse-vertical-navigation-wrapper { - box-shadow: none !important; - } - } -} diff --git a/src/app/modules/admin/docs/other-components/other-components.component.ts b/src/app/modules/admin/docs/other-components/other-components.component.ts deleted file mode 100644 index 5347a3ee..00000000 --- a/src/app/modules/admin/docs/other-components/other-components.component.ts +++ /dev/null @@ -1,155 +0,0 @@ -import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; -import { MatDrawer } from '@angular/material/sidenav'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import { FuseNavigationItem } from '@fuse/components/navigation'; -import { FuseMediaWatcherService } from '@fuse/services/media-watcher'; - -@Component({ - selector : 'other-components', - templateUrl : './other-components.component.html', - styleUrls : ['./other-components.component.scss'], - encapsulation : ViewEncapsulation.None, - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class OtherComponentsComponent implements OnInit, OnDestroy -{ - @ViewChild('matDrawer', {static: true}) matDrawer: MatDrawer; - drawerMode: 'side' | 'over'; - drawerOpened: boolean; - menuData: FuseNavigationItem[]; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor( - private _changeDetectorRef: ChangeDetectorRef, - private _fuseMediaWatcherService: FuseMediaWatcherService - ) - { - this.menuData = [ - { - id : 'common', - title : 'Common', - subtitle: 'Custom made high-level components', - type : 'group', - children: [ - { - id : 'common.overview', - title: 'Overview', - type : 'basic', - link : '/docs/other-components/common/overview' - }, - { - id : 'common.messages', - title: 'Messages', - type : 'basic', - link : '/docs/other-components/common/messages' - }, - { - id : 'common.notifications', - title: 'Notifications', - type : 'basic', - link : '/docs/other-components/common/notifications' - }, - { - id : 'common.search', - title: 'Search', - type : 'basic', - link : '/docs/other-components/common/search' - }, - { - id : 'common.shortcuts', - title: 'Shortcuts', - type : 'basic', - link : '/docs/other-components/common/shortcuts' - }, - { - id : 'common.user', - title: 'User', - type : 'basic', - link : '/docs/other-components/common/user' - } - ] - }, - { - id : 'divider-1', - type: 'divider' - }, - { - id : 'third-party', - title : 'Third party', - subtitle: 'Supported components', - type : 'group', - children: [ - { - id : 'third-party.apex-charts', - title: 'ApexCharts', - type : 'basic', - link : '/docs/other-components/third-party/apex-charts' - }, - { - id : 'third-party.full-calendar', - title: 'FullCalendar', - type : 'basic', - link : '/docs/other-components/third-party/full-calendar' - }, - { - id : 'third-party.ngx-markdown', - title: 'ngx-markdown', - type : 'basic', - link : '/docs/other-components/third-party/ngx-markdown' - }, - { - id : 'third-party.quill-editor', - title: 'Quill editor', - type : 'basic', - link : '/docs/other-components/third-party/quill-editor' - } - ] - } - ]; - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Subscribe to media query change - this._fuseMediaWatcherService.onMediaChange$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe(({matchingAliases}) => { - - // Set the drawerMode and drawerOpened - if ( matchingAliases.includes('md') ) - { - this.drawerMode = 'side'; - this.drawerOpened = true; - } - else - { - this.drawerMode = 'over'; - this.drawerOpened = false; - } - - // Mark for check - this._changeDetectorRef.markForCheck(); - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } -} diff --git a/src/app/modules/admin/docs/other-components/other-components.module.ts b/src/app/modules/admin/docs/other-components/other-components.module.ts deleted file mode 100644 index 35444dab..00000000 --- a/src/app/modules/admin/docs/other-components/other-components.module.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { MatIconModule } from '@angular/material/icon'; -import { MatSidenavModule } from '@angular/material/sidenav'; -import { FuseHighlightModule } from '@fuse/components/highlight'; -import { FuseAlertModule } from '@fuse/components/alert'; -import { FuseNavigationModule } from '@fuse/components/navigation'; -import { FuseScrollResetModule } from '@fuse/directives/scroll-reset'; -import { SharedModule } from 'app/shared/shared.module'; -import { OtherComponentsComponent } from 'app/modules/admin/docs/other-components/other-components.component'; -import { OverviewComponent } from 'app/modules/admin/docs/other-components/common/overview/overview.component'; -import { MessagesComponent } from 'app/modules/admin/docs/other-components/common/messages/messages.component'; -import { NotificationsComponent } from 'app/modules/admin/docs/other-components/common/notifications/notifications.component'; -import { SearchComponent } from 'app/modules/admin/docs/other-components/common/search/search.component'; -import { ShortcutsComponent } from 'app/modules/admin/docs/other-components/common/shortcuts/shortcuts.component'; -import { UserMenuComponent } from 'app/modules/admin/docs/other-components/common/user-menu/user-menu.component'; -import { ApexChartsComponent } from 'app/modules/admin/docs/other-components/third-party/apex-charts/apex-charts.component'; -import { FullCalendarComponent } from 'app/modules/admin/docs/other-components/third-party/full-calendar/full-calendar.component'; -import { NgxMarkdownComponent } from 'app/modules/admin/docs/other-components/third-party/ngx-markdown/ngx-markdown.component'; -import { QuillEditorComponent } from 'app/modules/admin/docs/other-components/third-party/quill-editor/quill-editor.component'; -import { otherComponentsRoutes } from 'app/modules/admin/docs/other-components/other-components.routing'; - -@NgModule({ - declarations: [ - OtherComponentsComponent, - OverviewComponent, - MessagesComponent, - NotificationsComponent, - SearchComponent, - ShortcutsComponent, - UserMenuComponent, - ApexChartsComponent, - FullCalendarComponent, - NgxMarkdownComponent, - QuillEditorComponent - ], - imports : [ - RouterModule.forChild(otherComponentsRoutes), - MatIconModule, - MatSidenavModule, - FuseHighlightModule, - FuseAlertModule, - FuseNavigationModule, - FuseScrollResetModule, - SharedModule - ] -}) -export class OtherComponentsModule -{ -} diff --git a/src/app/modules/admin/docs/other-components/other-components.routing.ts b/src/app/modules/admin/docs/other-components/other-components.routing.ts deleted file mode 100644 index 2a64c2ad..00000000 --- a/src/app/modules/admin/docs/other-components/other-components.routing.ts +++ /dev/null @@ -1,86 +0,0 @@ -import { Route } from '@angular/router'; -import { OtherComponentsComponent } from 'app/modules/admin/docs/other-components/other-components.component'; -import { OverviewComponent } from 'app/modules/admin/docs/other-components/common/overview/overview.component'; -import { MessagesComponent } from 'app/modules/admin/docs/other-components/common/messages/messages.component'; -import { NotificationsComponent } from 'app/modules/admin/docs/other-components/common/notifications/notifications.component'; -import { SearchComponent } from 'app/modules/admin/docs/other-components/common/search/search.component'; -import { ShortcutsComponent } from 'app/modules/admin/docs/other-components/common/shortcuts/shortcuts.component'; -import { UserMenuComponent } from 'app/modules/admin/docs/other-components/common/user-menu/user-menu.component'; -import { ApexChartsComponent } from 'app/modules/admin/docs/other-components/third-party/apex-charts/apex-charts.component'; -import { FullCalendarComponent } from 'app/modules/admin/docs/other-components/third-party/full-calendar/full-calendar.component'; -import { NgxMarkdownComponent } from 'app/modules/admin/docs/other-components/third-party/ngx-markdown/ngx-markdown.component'; -import { QuillEditorComponent } from 'app/modules/admin/docs/other-components/third-party/quill-editor/quill-editor.component'; - -export const otherComponentsRoutes: Route[] = [ - { - path : '', - component: OtherComponentsComponent, - children : [ - { - path : '', - pathMatch : 'full', - redirectTo: 'common/overview' - }, - { - path : 'common', - children: [ - { - path : '', - pathMatch : 'full', - redirectTo: 'overview' - }, - { - path : 'overview', - component: OverviewComponent - }, - { - path : 'messages', - component: MessagesComponent - }, - { - path : 'notifications', - component: NotificationsComponent - }, - { - path : 'search', - component: SearchComponent - }, - { - path : 'shortcuts', - component: ShortcutsComponent - }, - { - path : 'user', - component: UserMenuComponent - } - ] - }, - { - path : 'third-party', - children: [ - { - path : '', - pathMatch : 'full', - redirectTo: 'apex-charts' - }, - { - path : 'apex-charts', - component: ApexChartsComponent - }, - { - path : 'full-calendar', - component: FullCalendarComponent - }, - { - path : 'ngx-markdown', - component: NgxMarkdownComponent - }, - { - path : 'quill-editor', - component: QuillEditorComponent - } - ] - } - ] - } -]; diff --git a/src/app/modules/admin/docs/other-components/third-party/apex-charts/apex-charts.component.html b/src/app/modules/admin/docs/other-components/third-party/apex-charts/apex-charts.component.html deleted file mode 100644 index 3ac33298..00000000 --- a/src/app/modules/admin/docs/other-components/third-party/apex-charts/apex-charts.component.html +++ /dev/null @@ -1,61 +0,0 @@ -
- - -
-
- -
- - -
- - Third Party -
-
- -
-

- Apex Charts -

-
-
- -
- -
- -

- ApexCharts - - is a modern and interactive open-source charts library. Fuse supports ApexCharts through official - ng-apexcharts - - component. -

-

- All charts in the Demo app built using ApexCharts. -

- -
- -
diff --git a/src/app/modules/admin/docs/other-components/third-party/apex-charts/apex-charts.component.ts b/src/app/modules/admin/docs/other-components/third-party/apex-charts/apex-charts.component.ts deleted file mode 100644 index e5d91eae..00000000 --- a/src/app/modules/admin/docs/other-components/third-party/apex-charts/apex-charts.component.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from '@angular/core'; -import { OtherComponentsComponent } from 'app/modules/admin/docs/other-components/other-components.component'; - -@Component({ - selector : 'apex-charts', - templateUrl: './apex-charts.component.html', - styles : [''] -}) -export class ApexChartsComponent -{ - /** - * Constructor - */ - constructor(private _otherComponentsComponent: OtherComponentsComponent) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._otherComponentsComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/other-components/third-party/full-calendar/full-calendar.component.html b/src/app/modules/admin/docs/other-components/third-party/full-calendar/full-calendar.component.html deleted file mode 100644 index cb4e8f52..00000000 --- a/src/app/modules/admin/docs/other-components/third-party/full-calendar/full-calendar.component.html +++ /dev/null @@ -1,61 +0,0 @@ -
- - -
-
- -
- - -
- - Third Party -
-
- -
-

- FullCalendar -

-
-
- -
- -
- -

- FullCalendar - - is the most popular full-sized Javascript calendar library. Fuse supports FullCalendar through official - fullcalendar-angular - - component. -

-

- The Calendar demo application is built using FullCalendar. -

- -
- -
diff --git a/src/app/modules/admin/docs/other-components/third-party/full-calendar/full-calendar.component.ts b/src/app/modules/admin/docs/other-components/third-party/full-calendar/full-calendar.component.ts deleted file mode 100644 index 90a127e4..00000000 --- a/src/app/modules/admin/docs/other-components/third-party/full-calendar/full-calendar.component.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from '@angular/core'; -import { OtherComponentsComponent } from 'app/modules/admin/docs/other-components/other-components.component'; - -@Component({ - selector : 'full-calendar', - templateUrl: './full-calendar.component.html', - styles : [''] -}) -export class FullCalendarComponent -{ - /** - * Constructor - */ - constructor(private _otherComponentsComponent: OtherComponentsComponent) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._otherComponentsComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/other-components/third-party/ngx-markdown/ngx-markdown.component.html b/src/app/modules/admin/docs/other-components/third-party/ngx-markdown/ngx-markdown.component.html deleted file mode 100644 index 59eada1d..00000000 --- a/src/app/modules/admin/docs/other-components/third-party/ngx-markdown/ngx-markdown.component.html +++ /dev/null @@ -1,52 +0,0 @@ -
- - -
-
- -
- - -
- - Third Party -
-
- -
-

- ngxMarkdown -

-
-
- -
- -
- -

- ngxMarkdown - - is an Angular markdown component/directive/pipe/service to parse static, dynamic or remote content to html with syntax highlight. -

- -
- -
diff --git a/src/app/modules/admin/docs/other-components/third-party/ngx-markdown/ngx-markdown.component.ts b/src/app/modules/admin/docs/other-components/third-party/ngx-markdown/ngx-markdown.component.ts deleted file mode 100644 index 23b64e63..00000000 --- a/src/app/modules/admin/docs/other-components/third-party/ngx-markdown/ngx-markdown.component.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from '@angular/core'; -import { OtherComponentsComponent } from 'app/modules/admin/docs/other-components/other-components.component'; - -@Component({ - selector : 'ngx-markdown', - templateUrl: './ngx-markdown.component.html', - styles : [''] -}) -export class NgxMarkdownComponent -{ - /** - * Constructor - */ - constructor(private _otherComponentsComponent: OtherComponentsComponent) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._otherComponentsComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/docs/other-components/third-party/quill-editor/quill-editor.component.html b/src/app/modules/admin/docs/other-components/third-party/quill-editor/quill-editor.component.html deleted file mode 100644 index df7bf6b2..00000000 --- a/src/app/modules/admin/docs/other-components/third-party/quill-editor/quill-editor.component.html +++ /dev/null @@ -1,61 +0,0 @@ -
- - -
-
- -
- - -
- - Third Party -
-
- -
-

- Quill Editor -

-
-
- -
- -
- -

- Quill - - is a free, open source WYSIWYG editor built for the modern web. Fuse supports Quill editor through - ngx-quill - - component. -

-

- The Compose dialog from Mail app includes the Quill editor. -

- -
- -
diff --git a/src/app/modules/admin/docs/other-components/third-party/quill-editor/quill-editor.component.ts b/src/app/modules/admin/docs/other-components/third-party/quill-editor/quill-editor.component.ts deleted file mode 100644 index 3f66e244..00000000 --- a/src/app/modules/admin/docs/other-components/third-party/quill-editor/quill-editor.component.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from '@angular/core'; -import { OtherComponentsComponent } from 'app/modules/admin/docs/other-components/other-components.component'; - -@Component({ - selector : 'quill-editor', - templateUrl: './quill-editor.component.html', - styles : [''] -}) -export class QuillEditorComponent -{ - /** - * Constructor - */ - constructor(private _otherComponentsComponent: OtherComponentsComponent) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle the drawer - */ - toggleDrawer(): void - { - // Toggle the drawer - this._otherComponentsComponent.matDrawer.toggle(); - } -} diff --git a/src/app/modules/admin/ui/page-layouts/empty/normal-scroll/empty.component.html b/src/app/modules/admin/example/example.component.html similarity index 100% rename from src/app/modules/admin/ui/page-layouts/empty/normal-scroll/empty.component.html rename to src/app/modules/admin/example/example.component.html diff --git a/src/app/modules/admin/ui/page-layouts/overview/overview.component.ts b/src/app/modules/admin/example/example.component.ts similarity index 63% rename from src/app/modules/admin/ui/page-layouts/overview/overview.component.ts rename to src/app/modules/admin/example/example.component.ts index 3565970b..f92884f7 100644 --- a/src/app/modules/admin/ui/page-layouts/overview/overview.component.ts +++ b/src/app/modules/admin/example/example.component.ts @@ -1,11 +1,11 @@ import { Component, ViewEncapsulation } from '@angular/core'; @Component({ - selector : 'overview', - templateUrl : './overview.component.html', + selector : 'example', + templateUrl : './example.component.html', encapsulation: ViewEncapsulation.None }) -export class OverviewComponent +export class ExampleComponent { /** * Constructor diff --git a/src/app/modules/admin/example/example.module.ts b/src/app/modules/admin/example/example.module.ts new file mode 100644 index 00000000..b6664ea4 --- /dev/null +++ b/src/app/modules/admin/example/example.module.ts @@ -0,0 +1,22 @@ +import { NgModule } from '@angular/core'; +import { Route, RouterModule } from '@angular/router'; +import { ExampleComponent } from 'app/modules/admin/example/example.component'; + +const exampleRoutes: Route[] = [ + { + path : '', + component: ExampleComponent + } +]; + +@NgModule({ + declarations: [ + ExampleComponent + ], + imports : [ + RouterModule.forChild(exampleRoutes) + ] +}) +export class ExampleModule +{ +} diff --git a/src/app/modules/admin/pages/authentication/authentication.module.ts b/src/app/modules/admin/pages/authentication/authentication.module.ts deleted file mode 100644 index 7443448a..00000000 --- a/src/app/modules/admin/pages/authentication/authentication.module.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { NgModule } from '@angular/core'; -import { SignInModule } from 'app/modules/admin/pages/authentication/sign-in/sign-in.module'; -import { SignUpModule } from 'app/modules/admin/pages/authentication/sign-up/sign-up.module'; -import { SignOutModule } from 'app/modules/admin/pages/authentication/sign-out/sign-out.module'; -import { ForgotPasswordModule } from 'app/modules/admin/pages/authentication/forgot-password/forgot-password.module'; -import { ResetPasswordModule } from 'app/modules/admin/pages/authentication/reset-password/reset-password.module'; -import { UnlockSessionModule } from 'app/modules/admin/pages/authentication/unlock-session/unlock-session.module'; -import { ConfirmationRequiredModule } from 'app/modules/admin/pages/authentication/confirmation-required/confirmation-required.module'; - -@NgModule({ - imports: [ - SignInModule, - SignUpModule, - SignOutModule, - ForgotPasswordModule, - ResetPasswordModule, - UnlockSessionModule, - ConfirmationRequiredModule - ], - exports: [ - SignInModule, - SignUpModule, - SignOutModule, - ForgotPasswordModule, - ResetPasswordModule, - UnlockSessionModule, - ConfirmationRequiredModule - ] -}) -export class AuthenticationModule -{ -} diff --git a/src/app/modules/admin/pages/authentication/confirmation-required/classic/confirmation-required.component.html b/src/app/modules/admin/pages/authentication/confirmation-required/classic/confirmation-required.component.html deleted file mode 100644 index 9000aca6..00000000 --- a/src/app/modules/admin/pages/authentication/confirmation-required/classic/confirmation-required.component.html +++ /dev/null @@ -1,26 +0,0 @@ -
-
-
- -
- -
- - -
Confirmation required
-
- A confirmation mail with instructions has been sent to your email address. - Follow those instructions to confirm your email address and activate your account. -
- - -
- Return to - sign in - -
-
-
-
diff --git a/src/app/modules/admin/pages/authentication/confirmation-required/classic/confirmation-required.component.ts b/src/app/modules/admin/pages/authentication/confirmation-required/classic/confirmation-required.component.ts deleted file mode 100644 index c17d3d33..00000000 --- a/src/app/modules/admin/pages/authentication/confirmation-required/classic/confirmation-required.component.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; -import { FuseAnimations } from '@fuse/animations'; - -@Component({ - selector : 'confirmation-required-classic', - templateUrl : './confirmation-required.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class ConfirmationRequiredClassicComponent -{ - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/pages/authentication/confirmation-required/confirmation-required.module.ts b/src/app/modules/admin/pages/authentication/confirmation-required/confirmation-required.module.ts deleted file mode 100644 index b9d6b69e..00000000 --- a/src/app/modules/admin/pages/authentication/confirmation-required/confirmation-required.module.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; -import { MatButtonModule } from '@angular/material/button'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatInputModule } from '@angular/material/input'; -import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; -import { FuseAlertModule } from '@fuse/components/alert'; -import { SharedModule } from 'app/shared/shared.module'; -import { ConfirmationRequiredClassicComponent } from 'app/modules/admin/pages/authentication/confirmation-required/classic/confirmation-required.component'; -import { ConfirmationRequiredModernComponent } from 'app/modules/admin/pages/authentication/confirmation-required/modern/confirmation-required.component'; -import { ConfirmationRequiredModernReversedComponent } from 'app/modules/admin/pages/authentication/confirmation-required/modern-reversed/confirmation-required.component'; -import { ConfirmationRequiredFullscreenComponent } from 'app/modules/admin/pages/authentication/confirmation-required/fullscreen/confirmation-required.component'; -import { ConfirmationRequiredFullscreenReversedComponent } from 'app/modules/admin/pages/authentication/confirmation-required/fullscreen-reversed/confirmation-required.component'; -import { ConfirmationRequiredSplitScreenComponent } from 'app/modules/admin/pages/authentication/confirmation-required/split-screen/confirmation-required.component'; -import { ConfirmationRequiredSplitScreenReversedComponent } from 'app/modules/admin/pages/authentication/confirmation-required/split-screen-reversed/confirmation-required.component'; - -const routes: Routes = [ - { - path : 'confirmation-required', - children: [ - { - path : 'classic', - component: ConfirmationRequiredClassicComponent - }, - { - path : 'modern', - component: ConfirmationRequiredModernComponent - }, - { - path : 'modern-reversed', - component: ConfirmationRequiredModernReversedComponent - }, - { - path : 'split-screen', - component: ConfirmationRequiredSplitScreenComponent - }, - { - path : 'split-screen-reversed', - component: ConfirmationRequiredSplitScreenReversedComponent - }, - { - path : 'fullscreen', - component: ConfirmationRequiredFullscreenComponent - }, - { - path : 'fullscreen-reversed', - component: ConfirmationRequiredFullscreenReversedComponent - } - ] - } -]; - -@NgModule({ - declarations: [ - ConfirmationRequiredClassicComponent, - ConfirmationRequiredModernComponent, - ConfirmationRequiredModernReversedComponent, - ConfirmationRequiredFullscreenComponent, - ConfirmationRequiredFullscreenReversedComponent, - ConfirmationRequiredSplitScreenComponent, - ConfirmationRequiredSplitScreenReversedComponent - ], - imports : [ - RouterModule.forChild(routes), - MatButtonModule, - MatFormFieldModule, - MatInputModule, - MatProgressSpinnerModule, - FuseAlertModule, - SharedModule - ] -}) -export class ConfirmationRequiredModule -{ -} diff --git a/src/app/modules/admin/pages/authentication/confirmation-required/fullscreen-reversed/confirmation-required.component.html b/src/app/modules/admin/pages/authentication/confirmation-required/fullscreen-reversed/confirmation-required.component.html deleted file mode 100644 index c0fdf2d5..00000000 --- a/src/app/modules/admin/pages/authentication/confirmation-required/fullscreen-reversed/confirmation-required.component.html +++ /dev/null @@ -1,76 +0,0 @@ -
- -
-
- -
- -
- - -
Confirmation required
-
- A confirmation mail with instructions has been sent to your email address. - Follow those instructions to confirm your email address and activate your account. -
- - -
- Return to - sign in - -
-
-
-
diff --git a/src/app/modules/admin/pages/authentication/confirmation-required/fullscreen-reversed/confirmation-required.component.ts b/src/app/modules/admin/pages/authentication/confirmation-required/fullscreen-reversed/confirmation-required.component.ts deleted file mode 100644 index 0236d451..00000000 --- a/src/app/modules/admin/pages/authentication/confirmation-required/fullscreen-reversed/confirmation-required.component.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; -import { FuseAnimations } from '@fuse/animations'; - -@Component({ - selector : 'confirmation-required-fullscreen-reversed', - templateUrl : './confirmation-required.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class ConfirmationRequiredFullscreenReversedComponent -{ - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/pages/authentication/confirmation-required/fullscreen/confirmation-required.component.html b/src/app/modules/admin/pages/authentication/confirmation-required/fullscreen/confirmation-required.component.html deleted file mode 100644 index fc2b051e..00000000 --- a/src/app/modules/admin/pages/authentication/confirmation-required/fullscreen/confirmation-required.component.html +++ /dev/null @@ -1,76 +0,0 @@ -
-
-
- -
- -
- - -
Confirmation required
-
- A confirmation mail with instructions has been sent to your email address. - Follow those instructions to confirm your email address and activate your account. -
- - -
- Return to - sign in - -
-
-
- -
diff --git a/src/app/modules/admin/pages/authentication/confirmation-required/fullscreen/confirmation-required.component.ts b/src/app/modules/admin/pages/authentication/confirmation-required/fullscreen/confirmation-required.component.ts deleted file mode 100644 index f703a19d..00000000 --- a/src/app/modules/admin/pages/authentication/confirmation-required/fullscreen/confirmation-required.component.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; -import { FuseAnimations } from '@fuse/animations'; - -@Component({ - selector : 'confirmation-required-fullscreen', - templateUrl : './confirmation-required.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class ConfirmationRequiredFullscreenComponent -{ - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/pages/authentication/confirmation-required/modern-reversed/confirmation-required.component.html b/src/app/modules/admin/pages/authentication/confirmation-required/modern-reversed/confirmation-required.component.html deleted file mode 100644 index 000a9538..00000000 --- a/src/app/modules/admin/pages/authentication/confirmation-required/modern-reversed/confirmation-required.component.html +++ /dev/null @@ -1,78 +0,0 @@ -
-
- -
-
- -
- -
- - -
Confirmation required
-
- A confirmation mail with instructions has been sent to your email address. - Follow those instructions to confirm your email address and activate your account. -
- - -
- Return to - sign in - -
-
-
-
-
diff --git a/src/app/modules/admin/pages/authentication/confirmation-required/modern-reversed/confirmation-required.component.ts b/src/app/modules/admin/pages/authentication/confirmation-required/modern-reversed/confirmation-required.component.ts deleted file mode 100644 index 99b2cb9d..00000000 --- a/src/app/modules/admin/pages/authentication/confirmation-required/modern-reversed/confirmation-required.component.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; -import { FuseAnimations } from '@fuse/animations'; - -@Component({ - selector : 'confirmation-required-modern-reversed', - templateUrl : './confirmation-required.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class ConfirmationRequiredModernReversedComponent -{ - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/pages/authentication/confirmation-required/modern/confirmation-required.component.html b/src/app/modules/admin/pages/authentication/confirmation-required/modern/confirmation-required.component.html deleted file mode 100644 index dd4e0830..00000000 --- a/src/app/modules/admin/pages/authentication/confirmation-required/modern/confirmation-required.component.html +++ /dev/null @@ -1,78 +0,0 @@ -
-
-
-
- -
- -
- - -
Confirmation required
-
- A confirmation mail with instructions has been sent to your email address. - Follow those instructions to confirm your email address and activate your account. -
- - -
- Return to - sign in - -
-
-
- -
-
diff --git a/src/app/modules/admin/pages/authentication/confirmation-required/modern/confirmation-required.component.ts b/src/app/modules/admin/pages/authentication/confirmation-required/modern/confirmation-required.component.ts deleted file mode 100644 index 56cee33a..00000000 --- a/src/app/modules/admin/pages/authentication/confirmation-required/modern/confirmation-required.component.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; -import { FuseAnimations } from '@fuse/animations'; - -@Component({ - selector : 'confirmation-required-modern', - templateUrl : './confirmation-required.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class ConfirmationRequiredModernComponent -{ - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/pages/authentication/confirmation-required/split-screen-reversed/confirmation-required.component.html b/src/app/modules/admin/pages/authentication/confirmation-required/split-screen-reversed/confirmation-required.component.html deleted file mode 100644 index a263337d..00000000 --- a/src/app/modules/admin/pages/authentication/confirmation-required/split-screen-reversed/confirmation-required.component.html +++ /dev/null @@ -1,76 +0,0 @@ -
- -
-
- -
- -
- - -
Confirmation required
-
- A confirmation mail with instructions has been sent to your email address. - Follow those instructions to confirm your email address and activate your account. -
- - -
- Return to - sign in - -
-
-
-
diff --git a/src/app/modules/admin/pages/authentication/confirmation-required/split-screen-reversed/confirmation-required.component.ts b/src/app/modules/admin/pages/authentication/confirmation-required/split-screen-reversed/confirmation-required.component.ts deleted file mode 100644 index 2711c925..00000000 --- a/src/app/modules/admin/pages/authentication/confirmation-required/split-screen-reversed/confirmation-required.component.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; -import { FuseAnimations } from '@fuse/animations'; - -@Component({ - selector : 'confirmation-required-split-screen-reversed', - templateUrl : './confirmation-required.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class ConfirmationRequiredSplitScreenReversedComponent -{ - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/pages/authentication/confirmation-required/split-screen/confirmation-required.component.html b/src/app/modules/admin/pages/authentication/confirmation-required/split-screen/confirmation-required.component.html deleted file mode 100644 index 82aca84f..00000000 --- a/src/app/modules/admin/pages/authentication/confirmation-required/split-screen/confirmation-required.component.html +++ /dev/null @@ -1,76 +0,0 @@ -
-
-
- -
- -
- - -
Confirmation required
-
- A confirmation mail with instructions has been sent to your email address. - Follow those instructions to confirm your email address and activate your account. -
- - -
- Return to - sign in - -
-
-
- -
diff --git a/src/app/modules/admin/pages/authentication/confirmation-required/split-screen/confirmation-required.component.ts b/src/app/modules/admin/pages/authentication/confirmation-required/split-screen/confirmation-required.component.ts deleted file mode 100644 index a0baad7b..00000000 --- a/src/app/modules/admin/pages/authentication/confirmation-required/split-screen/confirmation-required.component.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; -import { FuseAnimations } from '@fuse/animations'; - -@Component({ - selector : 'confirmation-required-split-screen', - templateUrl : './confirmation-required.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class ConfirmationRequiredSplitScreenComponent -{ - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/pages/authentication/forgot-password/classic/forgot-password.component.html b/src/app/modules/admin/pages/authentication/forgot-password/classic/forgot-password.component.html deleted file mode 100644 index f74f04d8..00000000 --- a/src/app/modules/admin/pages/authentication/forgot-password/classic/forgot-password.component.html +++ /dev/null @@ -1,73 +0,0 @@ -
-
-
- -
- -
- - -
Forgot password?
-
Fill the form to reset your password
- - - - {{alert.message}} - - - -
- - - - Email address - - - Email address is required - - - Please enter a valid email address - - - - - - - -
- Return to - sign in - -
- -
-
-
-
diff --git a/src/app/modules/admin/pages/authentication/forgot-password/classic/forgot-password.component.ts b/src/app/modules/admin/pages/authentication/forgot-password/classic/forgot-password.component.ts deleted file mode 100644 index b709dd2f..00000000 --- a/src/app/modules/admin/pages/authentication/forgot-password/classic/forgot-password.component.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { Component, OnInit, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; - -@Component({ - selector : 'forgot-password-classic', - templateUrl : './forgot-password.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class ForgotPasswordClassicComponent implements OnInit -{ - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - forgotPasswordForm: FormGroup; - showAlert: boolean = false; - - /** - * Constructor - */ - constructor( - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.forgotPasswordForm = this._formBuilder.group({ - email: ['', [Validators.required, Validators.email]] - }); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Send the reset link - */ - sendResetLink(): void - { - } -} diff --git a/src/app/modules/admin/pages/authentication/forgot-password/forgot-password.module.ts b/src/app/modules/admin/pages/authentication/forgot-password/forgot-password.module.ts deleted file mode 100644 index d9b7c169..00000000 --- a/src/app/modules/admin/pages/authentication/forgot-password/forgot-password.module.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; -import { MatButtonModule } from '@angular/material/button'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatInputModule } from '@angular/material/input'; -import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; -import { FuseAlertModule } from '@fuse/components/alert'; -import { SharedModule } from 'app/shared/shared.module'; -import { ForgotPasswordClassicComponent } from 'app/modules/admin/pages/authentication/forgot-password/classic/forgot-password.component'; -import { ForgotPasswordModernComponent } from 'app/modules/admin/pages/authentication/forgot-password/modern/forgot-password.component'; -import { ForgotPasswordModernReversedComponent } from 'app/modules/admin/pages/authentication/forgot-password/modern-reversed/forgot-password.component'; -import { ForgotPasswordFullscreenComponent } from 'app/modules/admin/pages/authentication/forgot-password/fullscreen/forgot-password.component'; -import { ForgotPasswordFullscreenReversedComponent } from 'app/modules/admin/pages/authentication/forgot-password/fullscreen-reversed/forgot-password.component'; -import { ForgotPasswordSplitScreenComponent } from 'app/modules/admin/pages/authentication/forgot-password/split-screen/forgot-password.component'; -import { ForgotPasswordSplitScreenReversedComponent } from 'app/modules/admin/pages/authentication/forgot-password/split-screen-reversed/forgot-password.component'; - -const routes: Routes = [ - { - path : 'forgot-password', - children: [ - { - path : 'classic', - component: ForgotPasswordClassicComponent - }, - { - path : 'modern', - component: ForgotPasswordModernComponent - }, - { - path : 'modern-reversed', - component: ForgotPasswordModernReversedComponent - }, - { - path : 'split-screen', - component: ForgotPasswordSplitScreenComponent - }, - { - path : 'split-screen-reversed', - component: ForgotPasswordSplitScreenReversedComponent - }, - { - path : 'fullscreen', - component: ForgotPasswordFullscreenComponent - }, - { - path : 'fullscreen-reversed', - component: ForgotPasswordFullscreenReversedComponent - } - ] - } -]; - -@NgModule({ - declarations: [ - ForgotPasswordClassicComponent, - ForgotPasswordModernComponent, - ForgotPasswordModernReversedComponent, - ForgotPasswordFullscreenComponent, - ForgotPasswordFullscreenReversedComponent, - ForgotPasswordSplitScreenComponent, - ForgotPasswordSplitScreenReversedComponent - ], - imports : [ - RouterModule.forChild(routes), - MatButtonModule, - MatFormFieldModule, - MatInputModule, - MatProgressSpinnerModule, - FuseAlertModule, - SharedModule - ] -}) -export class ForgotPasswordModule -{ -} diff --git a/src/app/modules/admin/pages/authentication/forgot-password/fullscreen-reversed/forgot-password.component.html b/src/app/modules/admin/pages/authentication/forgot-password/fullscreen-reversed/forgot-password.component.html deleted file mode 100644 index a3e73210..00000000 --- a/src/app/modules/admin/pages/authentication/forgot-password/fullscreen-reversed/forgot-password.component.html +++ /dev/null @@ -1,123 +0,0 @@ -
- -
-
- -
- -
- - -
Forgot password?
-
Fill the form to reset your password
- - - - {{alert.message}} - - - -
- - - - Email address - - - Email address is required - - - Please enter a valid email address - - - - - - - -
- Return to - sign in - -
- -
-
-
-
diff --git a/src/app/modules/admin/pages/authentication/forgot-password/fullscreen-reversed/forgot-password.component.ts b/src/app/modules/admin/pages/authentication/forgot-password/fullscreen-reversed/forgot-password.component.ts deleted file mode 100644 index a604768a..00000000 --- a/src/app/modules/admin/pages/authentication/forgot-password/fullscreen-reversed/forgot-password.component.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { Component, OnInit, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; - -@Component({ - selector : 'forgot-password-fullscreen-reversed', - templateUrl : './forgot-password.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class ForgotPasswordFullscreenReversedComponent implements OnInit -{ - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - forgotPasswordForm: FormGroup; - showAlert: boolean = false; - - /** - * Constructor - */ - constructor( - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.forgotPasswordForm = this._formBuilder.group({ - email: ['', [Validators.required, Validators.email]] - }); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Send the reset link - */ - sendResetLink(): void - { - } -} diff --git a/src/app/modules/admin/pages/authentication/forgot-password/fullscreen/forgot-password.component.html b/src/app/modules/admin/pages/authentication/forgot-password/fullscreen/forgot-password.component.html deleted file mode 100644 index 99f95986..00000000 --- a/src/app/modules/admin/pages/authentication/forgot-password/fullscreen/forgot-password.component.html +++ /dev/null @@ -1,123 +0,0 @@ -
-
-
- -
- -
- - -
Forgot password?
-
Fill the form to reset your password
- - - - {{alert.message}} - - - -
- - - - Email address - - - Email address is required - - - Please enter a valid email address - - - - - - - -
- Return to - sign in - -
- -
-
-
- -
diff --git a/src/app/modules/admin/pages/authentication/forgot-password/fullscreen/forgot-password.component.ts b/src/app/modules/admin/pages/authentication/forgot-password/fullscreen/forgot-password.component.ts deleted file mode 100644 index eca52b3c..00000000 --- a/src/app/modules/admin/pages/authentication/forgot-password/fullscreen/forgot-password.component.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { Component, OnInit, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; - -@Component({ - selector : 'forgot-password-fullscreen', - templateUrl : './forgot-password.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class ForgotPasswordFullscreenComponent implements OnInit -{ - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - forgotPasswordForm: FormGroup; - showAlert: boolean = false; - - /** - * Constructor - */ - constructor( - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.forgotPasswordForm = this._formBuilder.group({ - email: ['', [Validators.required, Validators.email]] - }); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Send the reset link - */ - sendResetLink(): void - { - } -} diff --git a/src/app/modules/admin/pages/authentication/forgot-password/modern-reversed/forgot-password.component.html b/src/app/modules/admin/pages/authentication/forgot-password/modern-reversed/forgot-password.component.html deleted file mode 100644 index 469defc3..00000000 --- a/src/app/modules/admin/pages/authentication/forgot-password/modern-reversed/forgot-password.component.html +++ /dev/null @@ -1,125 +0,0 @@ -
-
- -
-
- -
- -
- - -
Forgot password?
-
Fill the form to reset your password
- - - - {{alert.message}} - - - -
- - - - Email address - - - Email address is required - - - Please enter a valid email address - - - - - - - -
- Return to - sign in - -
- -
-
-
-
-
diff --git a/src/app/modules/admin/pages/authentication/forgot-password/modern-reversed/forgot-password.component.ts b/src/app/modules/admin/pages/authentication/forgot-password/modern-reversed/forgot-password.component.ts deleted file mode 100644 index 48d12a5f..00000000 --- a/src/app/modules/admin/pages/authentication/forgot-password/modern-reversed/forgot-password.component.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { Component, OnInit, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; - -@Component({ - selector : 'forgot-password-modern-reversed', - templateUrl : './forgot-password.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class ForgotPasswordModernReversedComponent implements OnInit -{ - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - forgotPasswordForm: FormGroup; - showAlert: boolean = false; - - /** - * Constructor - */ - constructor( - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.forgotPasswordForm = this._formBuilder.group({ - email: ['', [Validators.required, Validators.email]] - }); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Send the reset link - */ - sendResetLink(): void - { - } -} diff --git a/src/app/modules/admin/pages/authentication/forgot-password/modern/forgot-password.component.html b/src/app/modules/admin/pages/authentication/forgot-password/modern/forgot-password.component.html deleted file mode 100644 index 4012fc85..00000000 --- a/src/app/modules/admin/pages/authentication/forgot-password/modern/forgot-password.component.html +++ /dev/null @@ -1,125 +0,0 @@ -
-
-
-
- -
- -
- - -
Forgot password?
-
Fill the form to reset your password
- - - - {{alert.message}} - - - -
- - - - Email address - - - Email address is required - - - Please enter a valid email address - - - - - - - -
- Return to - sign in - -
- -
-
-
- -
-
diff --git a/src/app/modules/admin/pages/authentication/forgot-password/modern/forgot-password.component.ts b/src/app/modules/admin/pages/authentication/forgot-password/modern/forgot-password.component.ts deleted file mode 100644 index 788d122e..00000000 --- a/src/app/modules/admin/pages/authentication/forgot-password/modern/forgot-password.component.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { Component, OnInit, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; - -@Component({ - selector : 'forgot-password-modern', - templateUrl : './forgot-password.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class ForgotPasswordModernComponent implements OnInit -{ - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - forgotPasswordForm: FormGroup; - showAlert: boolean = false; - - /** - * Constructor - */ - constructor( - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.forgotPasswordForm = this._formBuilder.group({ - email: ['', [Validators.required, Validators.email]] - }); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Send the reset link - */ - sendResetLink(): void - { - } -} diff --git a/src/app/modules/admin/pages/authentication/forgot-password/split-screen-reversed/forgot-password.component.html b/src/app/modules/admin/pages/authentication/forgot-password/split-screen-reversed/forgot-password.component.html deleted file mode 100644 index e619dd12..00000000 --- a/src/app/modules/admin/pages/authentication/forgot-password/split-screen-reversed/forgot-password.component.html +++ /dev/null @@ -1,123 +0,0 @@ -
- -
-
- -
- -
- - -
Forgot password?
-
Fill the form to reset your password
- - - - {{alert.message}} - - - -
- - - - Email address - - - Email address is required - - - Please enter a valid email address - - - - - - - -
- Return to - sign in - -
- -
-
-
-
diff --git a/src/app/modules/admin/pages/authentication/forgot-password/split-screen-reversed/forgot-password.component.ts b/src/app/modules/admin/pages/authentication/forgot-password/split-screen-reversed/forgot-password.component.ts deleted file mode 100644 index 4daaab5b..00000000 --- a/src/app/modules/admin/pages/authentication/forgot-password/split-screen-reversed/forgot-password.component.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { Component, OnInit, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; - -@Component({ - selector : 'forgot-password-split-screen-reversed', - templateUrl : './forgot-password.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class ForgotPasswordSplitScreenReversedComponent implements OnInit -{ - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - forgotPasswordForm: FormGroup; - showAlert: boolean = false; - - /** - * Constructor - */ - constructor( - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.forgotPasswordForm = this._formBuilder.group({ - email: ['', [Validators.required, Validators.email]] - }); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Send the reset link - */ - sendResetLink(): void - { - } -} diff --git a/src/app/modules/admin/pages/authentication/forgot-password/split-screen/forgot-password.component.html b/src/app/modules/admin/pages/authentication/forgot-password/split-screen/forgot-password.component.html deleted file mode 100644 index 4137a1c4..00000000 --- a/src/app/modules/admin/pages/authentication/forgot-password/split-screen/forgot-password.component.html +++ /dev/null @@ -1,123 +0,0 @@ -
-
-
- -
- -
- - -
Forgot password?
-
Fill the form to reset your password
- - - - {{alert.message}} - - - -
- - - - Email address - - - Email address is required - - - Please enter a valid email address - - - - - - - -
- Return to - sign in - -
- -
-
-
- -
diff --git a/src/app/modules/admin/pages/authentication/forgot-password/split-screen/forgot-password.component.ts b/src/app/modules/admin/pages/authentication/forgot-password/split-screen/forgot-password.component.ts deleted file mode 100644 index 0cf4abd9..00000000 --- a/src/app/modules/admin/pages/authentication/forgot-password/split-screen/forgot-password.component.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { Component, OnInit, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; - -@Component({ - selector : 'forgot-password-split-screen', - templateUrl : './forgot-password.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class ForgotPasswordSplitScreenComponent implements OnInit -{ - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - forgotPasswordForm: FormGroup; - showAlert: boolean = false; - - /** - * Constructor - */ - constructor( - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.forgotPasswordForm = this._formBuilder.group({ - email: ['', [Validators.required, Validators.email]] - }); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Send the reset link - */ - sendResetLink(): void - { - } -} diff --git a/src/app/modules/admin/pages/authentication/reset-password/classic/reset-password.component.html b/src/app/modules/admin/pages/authentication/reset-password/classic/reset-password.component.html deleted file mode 100644 index 7e1beff8..00000000 --- a/src/app/modules/admin/pages/authentication/reset-password/classic/reset-password.component.html +++ /dev/null @@ -1,117 +0,0 @@ -
-
-
- -
- -
- - -
Reset your password
-
Create a new password for your account
- - - - {{alert.message}} - - - -
- - - - Password - - - - Password is required - - - - - - Password (Confirm) - - - - Password confirmation is required - - - Passwords must match - - - - - - - -
- Return to - sign in - -
- -
-
-
-
diff --git a/src/app/modules/admin/pages/authentication/reset-password/classic/reset-password.component.ts b/src/app/modules/admin/pages/authentication/reset-password/classic/reset-password.component.ts deleted file mode 100644 index ed72d6ee..00000000 --- a/src/app/modules/admin/pages/authentication/reset-password/classic/reset-password.component.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Component, OnInit, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; -import { FuseValidators } from '@fuse/validators'; - -@Component({ - selector : 'reset-password-classic', - templateUrl : './reset-password.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class ResetPasswordClassicComponent implements OnInit -{ - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - resetPasswordForm: FormGroup; - showAlert: boolean = false; - - /** - * Constructor - */ - constructor( - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.resetPasswordForm = this._formBuilder.group({ - password : ['', Validators.required], - passwordConfirm: ['', Validators.required] - }, - { - validators: FuseValidators.mustMatch('password', 'passwordConfirm') - } - ); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Reset password - */ - resetPassword(): void - { - } -} diff --git a/src/app/modules/admin/pages/authentication/reset-password/fullscreen-reversed/reset-password.component.html b/src/app/modules/admin/pages/authentication/reset-password/fullscreen-reversed/reset-password.component.html deleted file mode 100644 index e9544c3c..00000000 --- a/src/app/modules/admin/pages/authentication/reset-password/fullscreen-reversed/reset-password.component.html +++ /dev/null @@ -1,167 +0,0 @@ -
- -
-
- -
- -
- - -
Reset your password
-
Create a new password for your account
- - - - {{alert.message}} - - - -
- - - - Password - - - - Password is required - - - - - - Password (Confirm) - - - - Password confirmation is required - - - Passwords must match - - - - - - - -
- Return to - sign in - -
- -
-
-
-
diff --git a/src/app/modules/admin/pages/authentication/reset-password/fullscreen-reversed/reset-password.component.ts b/src/app/modules/admin/pages/authentication/reset-password/fullscreen-reversed/reset-password.component.ts deleted file mode 100644 index 7e21179c..00000000 --- a/src/app/modules/admin/pages/authentication/reset-password/fullscreen-reversed/reset-password.component.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Component, OnInit, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; -import { FuseValidators } from '@fuse/validators'; - -@Component({ - selector : 'reset-password-fullscreen-reversed', - templateUrl : './reset-password.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class ResetPasswordFullscreenReversedComponent implements OnInit -{ - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - resetPasswordForm: FormGroup; - showAlert: boolean = false; - - /** - * Constructor - */ - constructor( - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.resetPasswordForm = this._formBuilder.group({ - password : ['', Validators.required], - passwordConfirm: ['', Validators.required] - }, - { - validators: FuseValidators.mustMatch('password', 'passwordConfirm') - } - ); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Reset password - */ - resetPassword(): void - { - } -} diff --git a/src/app/modules/admin/pages/authentication/reset-password/fullscreen/reset-password.component.html b/src/app/modules/admin/pages/authentication/reset-password/fullscreen/reset-password.component.html deleted file mode 100644 index 980cd2e4..00000000 --- a/src/app/modules/admin/pages/authentication/reset-password/fullscreen/reset-password.component.html +++ /dev/null @@ -1,167 +0,0 @@ -
-
-
- -
- -
- - -
Reset your password
-
Create a new password for your account
- - - - {{alert.message}} - - - -
- - - - Password - - - - Password is required - - - - - - Password (Confirm) - - - - Password confirmation is required - - - Passwords must match - - - - - - - -
- Return to - sign in - -
- -
-
-
- -
diff --git a/src/app/modules/admin/pages/authentication/reset-password/fullscreen/reset-password.component.ts b/src/app/modules/admin/pages/authentication/reset-password/fullscreen/reset-password.component.ts deleted file mode 100644 index 54ee9819..00000000 --- a/src/app/modules/admin/pages/authentication/reset-password/fullscreen/reset-password.component.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Component, OnInit, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; -import { FuseValidators } from '@fuse/validators'; - -@Component({ - selector : 'reset-password-fullscreen', - templateUrl : './reset-password.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class ResetPasswordFullscreenComponent implements OnInit -{ - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - resetPasswordForm: FormGroup; - showAlert: boolean = false; - - /** - * Constructor - */ - constructor( - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.resetPasswordForm = this._formBuilder.group({ - password : ['', Validators.required], - passwordConfirm: ['', Validators.required] - }, - { - validators: FuseValidators.mustMatch('password', 'passwordConfirm') - } - ); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Reset password - */ - resetPassword(): void - { - } -} diff --git a/src/app/modules/admin/pages/authentication/reset-password/modern-reversed/reset-password.component.html b/src/app/modules/admin/pages/authentication/reset-password/modern-reversed/reset-password.component.html deleted file mode 100644 index e834288e..00000000 --- a/src/app/modules/admin/pages/authentication/reset-password/modern-reversed/reset-password.component.html +++ /dev/null @@ -1,169 +0,0 @@ -
-
- -
-
- -
- -
- - -
Reset your password
-
Create a new password for your account
- - - - {{alert.message}} - - - -
- - - - Password - - - - Password is required - - - - - - Password (Confirm) - - - - Password confirmation is required - - - Passwords must match - - - - - - - -
- Return to - sign in - -
- -
-
-
-
-
diff --git a/src/app/modules/admin/pages/authentication/reset-password/modern-reversed/reset-password.component.ts b/src/app/modules/admin/pages/authentication/reset-password/modern-reversed/reset-password.component.ts deleted file mode 100644 index ec98c029..00000000 --- a/src/app/modules/admin/pages/authentication/reset-password/modern-reversed/reset-password.component.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Component, OnInit, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; -import { FuseValidators } from '@fuse/validators'; - -@Component({ - selector : 'reset-password-modern-reversed', - templateUrl : './reset-password.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class ResetPasswordModernReversedComponent implements OnInit -{ - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - resetPasswordForm: FormGroup; - showAlert: boolean = false; - - /** - * Constructor - */ - constructor( - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.resetPasswordForm = this._formBuilder.group({ - password : ['', Validators.required], - passwordConfirm: ['', Validators.required] - }, - { - validators: FuseValidators.mustMatch('password', 'passwordConfirm') - } - ); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Reset password - */ - resetPassword(): void - { - } -} diff --git a/src/app/modules/admin/pages/authentication/reset-password/modern/reset-password.component.html b/src/app/modules/admin/pages/authentication/reset-password/modern/reset-password.component.html deleted file mode 100644 index 7dc22232..00000000 --- a/src/app/modules/admin/pages/authentication/reset-password/modern/reset-password.component.html +++ /dev/null @@ -1,169 +0,0 @@ -
-
-
-
- -
- -
- - -
Reset your password
-
Create a new password for your account
- - - - {{alert.message}} - - - -
- - - - Password - - - - Password is required - - - - - - Password (Confirm) - - - - Password confirmation is required - - - Passwords must match - - - - - - - -
- Return to - sign in - -
- -
-
-
- -
-
diff --git a/src/app/modules/admin/pages/authentication/reset-password/modern/reset-password.component.ts b/src/app/modules/admin/pages/authentication/reset-password/modern/reset-password.component.ts deleted file mode 100644 index d68dec30..00000000 --- a/src/app/modules/admin/pages/authentication/reset-password/modern/reset-password.component.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Component, OnInit, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; -import { FuseValidators } from '@fuse/validators'; - -@Component({ - selector : 'reset-password-modern', - templateUrl : './reset-password.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class ResetPasswordModernComponent implements OnInit -{ - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - resetPasswordForm: FormGroup; - showAlert: boolean = false; - - /** - * Constructor - */ - constructor( - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.resetPasswordForm = this._formBuilder.group({ - password : ['', Validators.required], - passwordConfirm: ['', Validators.required] - }, - { - validators: FuseValidators.mustMatch('password', 'passwordConfirm') - } - ); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Reset password - */ - resetPassword(): void - { - } -} diff --git a/src/app/modules/admin/pages/authentication/reset-password/reset-password.module.ts b/src/app/modules/admin/pages/authentication/reset-password/reset-password.module.ts deleted file mode 100644 index 9a3d7209..00000000 --- a/src/app/modules/admin/pages/authentication/reset-password/reset-password.module.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; -import { MatButtonModule } from '@angular/material/button'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatIconModule } from '@angular/material/icon'; -import { MatInputModule } from '@angular/material/input'; -import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; -import { FuseAlertModule } from '@fuse/components/alert'; -import { SharedModule } from 'app/shared/shared.module'; -import { ResetPasswordClassicComponent } from 'app/modules/admin/pages/authentication/reset-password/classic/reset-password.component'; -import { ResetPasswordModernComponent } from 'app/modules/admin/pages/authentication/reset-password/modern/reset-password.component'; -import { ResetPasswordModernReversedComponent } from 'app/modules/admin/pages/authentication/reset-password/modern-reversed/reset-password.component'; -import { ResetPasswordFullscreenComponent } from 'app/modules/admin/pages/authentication/reset-password/fullscreen/reset-password.component'; -import { ResetPasswordFullscreenReversedComponent } from 'app/modules/admin/pages/authentication/reset-password/fullscreen-reversed/reset-password.component'; -import { ResetPasswordSplitScreenComponent } from 'app/modules/admin/pages/authentication/reset-password/split-screen/reset-password.component'; -import { ResetPasswordSplitScreenReversedComponent } from 'app/modules/admin/pages/authentication/reset-password/split-screen-reversed/reset-password.component'; - -const routes: Routes = [ - { - path : 'reset-password', - children: [ - { - path : 'classic', - component: ResetPasswordClassicComponent - }, - { - path : 'modern', - component: ResetPasswordModernComponent - }, - { - path : 'modern-reversed', - component: ResetPasswordModernReversedComponent - }, - { - path : 'split-screen', - component: ResetPasswordSplitScreenComponent - }, - { - path : 'split-screen-reversed', - component: ResetPasswordSplitScreenReversedComponent - }, - { - path : 'fullscreen', - component: ResetPasswordFullscreenComponent - }, - { - path : 'fullscreen-reversed', - component: ResetPasswordFullscreenReversedComponent - } - ] - } -]; - -@NgModule({ - declarations: [ - ResetPasswordClassicComponent, - ResetPasswordModernComponent, - ResetPasswordModernReversedComponent, - ResetPasswordFullscreenComponent, - ResetPasswordFullscreenReversedComponent, - ResetPasswordSplitScreenComponent, - ResetPasswordSplitScreenReversedComponent - ], - imports : [ - RouterModule.forChild(routes), - MatButtonModule, - MatFormFieldModule, - MatIconModule, - MatInputModule, - MatProgressSpinnerModule, - FuseAlertModule, - SharedModule - ] -}) -export class ResetPasswordModule -{ -} diff --git a/src/app/modules/admin/pages/authentication/reset-password/split-screen-reversed/reset-password.component.html b/src/app/modules/admin/pages/authentication/reset-password/split-screen-reversed/reset-password.component.html deleted file mode 100644 index 5ad41d0c..00000000 --- a/src/app/modules/admin/pages/authentication/reset-password/split-screen-reversed/reset-password.component.html +++ /dev/null @@ -1,167 +0,0 @@ -
- -
-
- -
- -
- - -
Reset your password
-
Create a new password for your account
- - - - {{alert.message}} - - - -
- - - - Password - - - - Password is required - - - - - - Password (Confirm) - - - - Password confirmation is required - - - Passwords must match - - - - - - - -
- Return to - sign in - -
- -
-
-
-
diff --git a/src/app/modules/admin/pages/authentication/reset-password/split-screen-reversed/reset-password.component.ts b/src/app/modules/admin/pages/authentication/reset-password/split-screen-reversed/reset-password.component.ts deleted file mode 100644 index c8e22498..00000000 --- a/src/app/modules/admin/pages/authentication/reset-password/split-screen-reversed/reset-password.component.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Component, OnInit, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; -import { FuseValidators } from '@fuse/validators'; - -@Component({ - selector : 'reset-password-split-screen-reversed', - templateUrl : './reset-password.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class ResetPasswordSplitScreenReversedComponent implements OnInit -{ - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - resetPasswordForm: FormGroup; - showAlert: boolean = false; - - /** - * Constructor - */ - constructor( - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.resetPasswordForm = this._formBuilder.group({ - password : ['', Validators.required], - passwordConfirm: ['', Validators.required] - }, - { - validators: FuseValidators.mustMatch('password', 'passwordConfirm') - } - ); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Reset password - */ - resetPassword(): void - { - } -} diff --git a/src/app/modules/admin/pages/authentication/reset-password/split-screen/reset-password.component.html b/src/app/modules/admin/pages/authentication/reset-password/split-screen/reset-password.component.html deleted file mode 100644 index c424027c..00000000 --- a/src/app/modules/admin/pages/authentication/reset-password/split-screen/reset-password.component.html +++ /dev/null @@ -1,167 +0,0 @@ -
-
-
- -
- -
- - -
Reset your password
-
Create a new password for your account
- - - - {{alert.message}} - - - -
- - - - Password - - - - Password is required - - - - - - Password (Confirm) - - - - Password confirmation is required - - - Passwords must match - - - - - - - -
- Return to - sign in - -
- -
-
-
- -
diff --git a/src/app/modules/admin/pages/authentication/reset-password/split-screen/reset-password.component.ts b/src/app/modules/admin/pages/authentication/reset-password/split-screen/reset-password.component.ts deleted file mode 100644 index aeb38200..00000000 --- a/src/app/modules/admin/pages/authentication/reset-password/split-screen/reset-password.component.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Component, OnInit, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; -import { FuseValidators } from '@fuse/validators'; - -@Component({ - selector : 'reset-password-split-screen', - templateUrl : './reset-password.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class ResetPasswordSplitScreenComponent implements OnInit -{ - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - resetPasswordForm: FormGroup; - showAlert: boolean = false; - - /** - * Constructor - */ - constructor( - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.resetPasswordForm = this._formBuilder.group({ - password : ['', Validators.required], - passwordConfirm: ['', Validators.required] - }, - { - validators: FuseValidators.mustMatch('password', 'passwordConfirm') - } - ); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Reset password - */ - resetPassword(): void - { - } -} diff --git a/src/app/modules/admin/pages/authentication/sign-in/classic/sign-in.component.html b/src/app/modules/admin/pages/authentication/sign-in/classic/sign-in.component.html deleted file mode 100644 index b3705f95..00000000 --- a/src/app/modules/admin/pages/authentication/sign-in/classic/sign-in.component.html +++ /dev/null @@ -1,145 +0,0 @@ -
-
-
- -
- -
- - -
Sign in
-
-
Don't have an account?
- Sign up - -
- - - - {{alert.message}} - - - -
- - - - Email address - - - Email address is required - - - Please enter a valid email address - - - - - - Password - - - - Password is required - - - - -
- - Remember me - - Forgot password? - -
- - - - - -
-
-
Or continue with
-
-
- - -
- - - -
-
-
-
-
diff --git a/src/app/modules/admin/pages/authentication/sign-in/classic/sign-in.component.ts b/src/app/modules/admin/pages/authentication/sign-in/classic/sign-in.component.ts deleted file mode 100644 index fa674b81..00000000 --- a/src/app/modules/admin/pages/authentication/sign-in/classic/sign-in.component.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { Component, OnInit, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; -import { AuthService } from 'app/core/auth/auth.service'; - -@Component({ - selector : 'sign-in-classic', - templateUrl : './sign-in.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class SignInClassicComponent implements OnInit -{ - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - signInForm: FormGroup; - showAlert: boolean = false; - - /** - * Constructor - */ - constructor( - private _authService: AuthService, - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.signInForm = this._formBuilder.group({ - email : ['', [Validators.required, Validators.email]], - password : ['', Validators.required], - rememberMe: [''] - }); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Sign in - */ - signIn(): void - { - } -} diff --git a/src/app/modules/admin/pages/authentication/sign-in/fullscreen-reversed/sign-in.component.html b/src/app/modules/admin/pages/authentication/sign-in/fullscreen-reversed/sign-in.component.html deleted file mode 100644 index 3d56820e..00000000 --- a/src/app/modules/admin/pages/authentication/sign-in/fullscreen-reversed/sign-in.component.html +++ /dev/null @@ -1,195 +0,0 @@ -
- -
-
- -
- -
- - -
Sign in
-
-
Don't have an account?
- Sign up - -
- - - - {{alert.message}} - - - -
- - - - Email address - - - Email address is required - - - Please enter a valid email address - - - - - - Password - - - - Password is required - - - - -
- - Remember me - - Forgot password? - -
- - - - - -
-
-
Or continue with
-
-
- - -
- - - -
-
-
-
-
diff --git a/src/app/modules/admin/pages/authentication/sign-in/fullscreen-reversed/sign-in.component.ts b/src/app/modules/admin/pages/authentication/sign-in/fullscreen-reversed/sign-in.component.ts deleted file mode 100644 index dc9ee74f..00000000 --- a/src/app/modules/admin/pages/authentication/sign-in/fullscreen-reversed/sign-in.component.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { Component, OnInit, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; -import { AuthService } from 'app/core/auth/auth.service'; - -@Component({ - selector : 'sign-in-fullscreen-reversed', - templateUrl : './sign-in.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class SignInFullscreenReversedComponent implements OnInit -{ - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - signInForm: FormGroup; - showAlert: boolean = false; - - /** - * Constructor - */ - constructor( - private _authService: AuthService, - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.signInForm = this._formBuilder.group({ - email : ['', [Validators.required, Validators.email]], - password : ['', Validators.required], - rememberMe: [''] - }); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Sign in - */ - signIn(): void - { - } -} diff --git a/src/app/modules/admin/pages/authentication/sign-in/fullscreen/sign-in.component.html b/src/app/modules/admin/pages/authentication/sign-in/fullscreen/sign-in.component.html deleted file mode 100644 index c29522cf..00000000 --- a/src/app/modules/admin/pages/authentication/sign-in/fullscreen/sign-in.component.html +++ /dev/null @@ -1,195 +0,0 @@ -
-
-
- -
- -
- - -
Sign in
-
-
Don't have an account?
- Sign up - -
- - - - {{alert.message}} - - - -
- - - - Email address - - - Email address is required - - - Please enter a valid email address - - - - - - Password - - - - Password is required - - - - -
- - Remember me - - Forgot password? - -
- - - - - -
-
-
Or continue with
-
-
- - -
- - - -
-
-
-
- -
diff --git a/src/app/modules/admin/pages/authentication/sign-in/fullscreen/sign-in.component.ts b/src/app/modules/admin/pages/authentication/sign-in/fullscreen/sign-in.component.ts deleted file mode 100644 index 2db3388d..00000000 --- a/src/app/modules/admin/pages/authentication/sign-in/fullscreen/sign-in.component.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { Component, OnInit, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; -import { AuthService } from 'app/core/auth/auth.service'; - -@Component({ - selector : 'sign-in-fullscreen', - templateUrl : './sign-in.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class SignInFullscreenComponent implements OnInit -{ - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - signInForm: FormGroup; - showAlert: boolean = false; - - /** - * Constructor - */ - constructor( - private _authService: AuthService, - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.signInForm = this._formBuilder.group({ - email : ['', [Validators.required, Validators.email]], - password : ['', Validators.required], - rememberMe: [''] - }); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Sign in - */ - signIn(): void - { - } -} diff --git a/src/app/modules/admin/pages/authentication/sign-in/modern-reversed/sign-in.component.html b/src/app/modules/admin/pages/authentication/sign-in/modern-reversed/sign-in.component.html deleted file mode 100644 index e4c4f088..00000000 --- a/src/app/modules/admin/pages/authentication/sign-in/modern-reversed/sign-in.component.html +++ /dev/null @@ -1,197 +0,0 @@ -
-
- -
-
- -
- -
- - -
Sign in
-
-
Don't have an account?
- Sign up - -
- - - - {{alert.message}} - - - -
- - - - Email address - - - Email address is required - - - Please enter a valid email address - - - - - - Password - - - - Password is required - - - - -
- - Remember me - - Forgot password? - -
- - - - - -
-
-
Or continue with
-
-
- - -
- - - -
-
-
-
-
-
diff --git a/src/app/modules/admin/pages/authentication/sign-in/modern-reversed/sign-in.component.ts b/src/app/modules/admin/pages/authentication/sign-in/modern-reversed/sign-in.component.ts deleted file mode 100644 index 68bbf776..00000000 --- a/src/app/modules/admin/pages/authentication/sign-in/modern-reversed/sign-in.component.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { Component, OnInit, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; -import { AuthService } from 'app/core/auth/auth.service'; - -@Component({ - selector : 'sign-in-modern-reversed', - templateUrl : './sign-in.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class SignInModernReversedComponent implements OnInit -{ - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - signInForm: FormGroup; - showAlert: boolean = false; - - /** - * Constructor - */ - constructor( - private _authService: AuthService, - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.signInForm = this._formBuilder.group({ - email : ['', [Validators.required, Validators.email]], - password : ['', Validators.required], - rememberMe: [''] - }); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Sign in - */ - signIn(): void - { - } -} diff --git a/src/app/modules/admin/pages/authentication/sign-in/modern/sign-in.component.html b/src/app/modules/admin/pages/authentication/sign-in/modern/sign-in.component.html deleted file mode 100644 index ede32ff5..00000000 --- a/src/app/modules/admin/pages/authentication/sign-in/modern/sign-in.component.html +++ /dev/null @@ -1,197 +0,0 @@ -
-
-
-
- -
- -
- - -
Sign in
-
-
Don't have an account?
- Sign up - -
- - - - {{alert.message}} - - - -
- - - - Email address - - - Email address is required - - - Please enter a valid email address - - - - - - Password - - - - Password is required - - - - -
- - Remember me - - Forgot password? - -
- - - - - -
-
-
Or continue with
-
-
- - -
- - - -
-
-
-
- -
-
diff --git a/src/app/modules/admin/pages/authentication/sign-in/modern/sign-in.component.ts b/src/app/modules/admin/pages/authentication/sign-in/modern/sign-in.component.ts deleted file mode 100644 index 47960970..00000000 --- a/src/app/modules/admin/pages/authentication/sign-in/modern/sign-in.component.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { Component, OnInit, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; -import { AuthService } from 'app/core/auth/auth.service'; - -@Component({ - selector : 'sign-in-modern', - templateUrl : './sign-in.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class SignInModernComponent implements OnInit -{ - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - signInForm: FormGroup; - showAlert: boolean = false; - - /** - * Constructor - */ - constructor( - private _authService: AuthService, - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.signInForm = this._formBuilder.group({ - email : ['', [Validators.required, Validators.email]], - password : ['', Validators.required], - rememberMe: [''] - }); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Sign in - */ - signIn(): void - { - } -} diff --git a/src/app/modules/admin/pages/authentication/sign-in/sign-in.module.ts b/src/app/modules/admin/pages/authentication/sign-in/sign-in.module.ts deleted file mode 100644 index 2da89574..00000000 --- a/src/app/modules/admin/pages/authentication/sign-in/sign-in.module.ts +++ /dev/null @@ -1,79 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; -import { MatButtonModule } from '@angular/material/button'; -import { MatCheckboxModule } from '@angular/material/checkbox'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatIconModule } from '@angular/material/icon'; -import { MatInputModule } from '@angular/material/input'; -import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; -import { FuseAlertModule } from '@fuse/components/alert'; -import { SharedModule } from 'app/shared/shared.module'; -import { SignInClassicComponent } from 'app/modules/admin/pages/authentication/sign-in/classic/sign-in.component'; -import { SignInModernComponent } from 'app/modules/admin/pages/authentication/sign-in/modern/sign-in.component'; -import { SignInModernReversedComponent } from 'app/modules/admin/pages/authentication/sign-in/modern-reversed/sign-in.component'; -import { SignInFullscreenComponent } from 'app/modules/admin/pages/authentication/sign-in/fullscreen/sign-in.component'; -import { SignInFullscreenReversedComponent } from 'app/modules/admin/pages/authentication/sign-in/fullscreen-reversed/sign-in.component'; -import { SignInSplitScreenComponent } from 'app/modules/admin/pages/authentication/sign-in/split-screen/sign-in.component'; -import { SignInSplitScreenReversedComponent } from 'app/modules/admin/pages/authentication/sign-in/split-screen-reversed/sign-in.component'; - -const routes: Routes = [ - { - path : 'sign-in', - children: [ - { - path : 'classic', - component: SignInClassicComponent - }, - { - path : 'modern', - component: SignInModernComponent - }, - { - path : 'modern-reversed', - component: SignInModernReversedComponent - }, - { - path : 'split-screen', - component: SignInSplitScreenComponent - }, - { - path : 'split-screen-reversed', - component: SignInSplitScreenReversedComponent - }, - { - path : 'fullscreen', - component: SignInFullscreenComponent - }, - { - path : 'fullscreen-reversed', - component: SignInFullscreenReversedComponent - } - ] - } -]; - -@NgModule({ - declarations: [ - SignInClassicComponent, - SignInModernComponent, - SignInModernReversedComponent, - SignInFullscreenComponent, - SignInFullscreenReversedComponent, - SignInSplitScreenComponent, - SignInSplitScreenReversedComponent - ], - imports : [ - RouterModule.forChild(routes), - MatButtonModule, - MatCheckboxModule, - MatFormFieldModule, - MatIconModule, - MatInputModule, - MatProgressSpinnerModule, - FuseAlertModule, - SharedModule - ] -}) -export class SignInModule -{ -} diff --git a/src/app/modules/admin/pages/authentication/sign-in/split-screen-reversed/sign-in.component.html b/src/app/modules/admin/pages/authentication/sign-in/split-screen-reversed/sign-in.component.html deleted file mode 100644 index a7440482..00000000 --- a/src/app/modules/admin/pages/authentication/sign-in/split-screen-reversed/sign-in.component.html +++ /dev/null @@ -1,195 +0,0 @@ -
- -
-
- -
- -
- - -
Sign in
-
-
Don't have an account?
- Sign up - -
- - - - {{alert.message}} - - - -
- - - - Email address - - - Email address is required - - - Please enter a valid email address - - - - - - Password - - - - Password is required - - - - -
- - Remember me - - Forgot password? - -
- - - - - -
-
-
Or continue with
-
-
- - -
- - - -
-
-
-
-
diff --git a/src/app/modules/admin/pages/authentication/sign-in/split-screen-reversed/sign-in.component.ts b/src/app/modules/admin/pages/authentication/sign-in/split-screen-reversed/sign-in.component.ts deleted file mode 100644 index 8c0cabc5..00000000 --- a/src/app/modules/admin/pages/authentication/sign-in/split-screen-reversed/sign-in.component.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { Component, OnInit, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; -import { AuthService } from 'app/core/auth/auth.service'; - -@Component({ - selector : 'sign-in-split-screen-reversed', - templateUrl : './sign-in.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class SignInSplitScreenReversedComponent implements OnInit -{ - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - signInForm: FormGroup; - showAlert: boolean = false; - - /** - * Constructor - */ - constructor( - private _authService: AuthService, - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.signInForm = this._formBuilder.group({ - email : ['', [Validators.required, Validators.email]], - password : ['', Validators.required], - rememberMe: [''] - }); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Sign in - */ - signIn(): void - { - } -} diff --git a/src/app/modules/admin/pages/authentication/sign-in/split-screen/sign-in.component.html b/src/app/modules/admin/pages/authentication/sign-in/split-screen/sign-in.component.html deleted file mode 100644 index 4d787bba..00000000 --- a/src/app/modules/admin/pages/authentication/sign-in/split-screen/sign-in.component.html +++ /dev/null @@ -1,195 +0,0 @@ -
-
-
- -
- -
- - -
Sign in
-
-
Don't have an account?
- Sign up - -
- - - - {{alert.message}} - - - -
- - - - Email address - - - Email address is required - - - Please enter a valid email address - - - - - - Password - - - - Password is required - - - - -
- - Remember me - - Forgot password? - -
- - - - - -
-
-
Or continue with
-
-
- - -
- - - -
-
-
-
- -
diff --git a/src/app/modules/admin/pages/authentication/sign-in/split-screen/sign-in.component.ts b/src/app/modules/admin/pages/authentication/sign-in/split-screen/sign-in.component.ts deleted file mode 100644 index b4c63dc4..00000000 --- a/src/app/modules/admin/pages/authentication/sign-in/split-screen/sign-in.component.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { Component, OnInit, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; -import { AuthService } from 'app/core/auth/auth.service'; - -@Component({ - selector : 'sign-in-split-screen', - templateUrl : './sign-in.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class SignInSplitScreenComponent implements OnInit -{ - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - signInForm: FormGroup; - showAlert: boolean = false; - - /** - * Constructor - */ - constructor( - private _authService: AuthService, - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.signInForm = this._formBuilder.group({ - email : ['', [Validators.required, Validators.email]], - password : ['', Validators.required], - rememberMe: [''] - }); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Sign in - */ - signIn(): void - { - } -} diff --git a/src/app/modules/admin/pages/authentication/sign-out/classic/sign-out.component.html b/src/app/modules/admin/pages/authentication/sign-out/classic/sign-out.component.html deleted file mode 100644 index c89a67f5..00000000 --- a/src/app/modules/admin/pages/authentication/sign-out/classic/sign-out.component.html +++ /dev/null @@ -1,33 +0,0 @@ -
-
-
- -
- -
- - -
You have signed out!
-
- - - Redirecting in {{countdown | i18nPlural: countdownMapping }} - - - - - You are now being redirected! - -
- - -
- Go to - sign in - -
-
-
-
diff --git a/src/app/modules/admin/pages/authentication/sign-out/classic/sign-out.component.ts b/src/app/modules/admin/pages/authentication/sign-out/classic/sign-out.component.ts deleted file mode 100644 index ce232574..00000000 --- a/src/app/modules/admin/pages/authentication/sign-out/classic/sign-out.component.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; -import { FuseAnimations } from '@fuse/animations'; -import { AuthService } from 'app/core/auth/auth.service'; -import { Router } from '@angular/router'; - -@Component({ - selector : 'sign-out-classic', - templateUrl : './sign-out.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class SignOutClassicComponent -{ - countdown: number = 5; - countdownMapping: any = { - '=1' : '# second', - 'other': '# seconds' - }; - - /** - * Constructor - */ - constructor( - private _authService: AuthService, - private _router: Router - ) - { - } -} diff --git a/src/app/modules/admin/pages/authentication/sign-out/fullscreen-reversed/sign-out.component.html b/src/app/modules/admin/pages/authentication/sign-out/fullscreen-reversed/sign-out.component.html deleted file mode 100644 index 2e362995..00000000 --- a/src/app/modules/admin/pages/authentication/sign-out/fullscreen-reversed/sign-out.component.html +++ /dev/null @@ -1,83 +0,0 @@ -
- -
-
- -
- -
- - -
You have signed out!
-
- - - Redirecting in {{countdown | i18nPlural: countdownMapping }} - - - - - You are now being redirected! - -
- - -
- Go to - sign in - -
-
-
-
diff --git a/src/app/modules/admin/pages/authentication/sign-out/fullscreen-reversed/sign-out.component.ts b/src/app/modules/admin/pages/authentication/sign-out/fullscreen-reversed/sign-out.component.ts deleted file mode 100644 index 23fbba24..00000000 --- a/src/app/modules/admin/pages/authentication/sign-out/fullscreen-reversed/sign-out.component.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; -import { FuseAnimations } from '@fuse/animations'; -import { AuthService } from 'app/core/auth/auth.service'; -import { Router } from '@angular/router'; - -@Component({ - selector : 'sign-out-fullscreen-reversed', - templateUrl : './sign-out.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class SignOutFullscreenReversedComponent -{ - countdown: number = 5; - countdownMapping: any = { - '=1' : '# second', - 'other': '# seconds' - }; - - /** - * Constructor - */ - constructor( - private _authService: AuthService, - private _router: Router - ) - { - } -} diff --git a/src/app/modules/admin/pages/authentication/sign-out/fullscreen/sign-out.component.html b/src/app/modules/admin/pages/authentication/sign-out/fullscreen/sign-out.component.html deleted file mode 100644 index 445f5087..00000000 --- a/src/app/modules/admin/pages/authentication/sign-out/fullscreen/sign-out.component.html +++ /dev/null @@ -1,83 +0,0 @@ -
-
-
- -
- -
- - -
You have signed out!
-
- - - Redirecting in {{countdown | i18nPlural: countdownMapping }} - - - - - You are now being redirected! - -
- - -
- Go to - sign in - -
-
-
- -
diff --git a/src/app/modules/admin/pages/authentication/sign-out/fullscreen/sign-out.component.ts b/src/app/modules/admin/pages/authentication/sign-out/fullscreen/sign-out.component.ts deleted file mode 100644 index 4ee090e2..00000000 --- a/src/app/modules/admin/pages/authentication/sign-out/fullscreen/sign-out.component.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; -import { FuseAnimations } from '@fuse/animations'; -import { AuthService } from 'app/core/auth/auth.service'; -import { Router } from '@angular/router'; - -@Component({ - selector : 'sign-out-fullscreen', - templateUrl : './sign-out.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class SignOutFullscreenComponent -{ - countdown: number = 5; - countdownMapping: any = { - '=1' : '# second', - 'other': '# seconds' - }; - - /** - * Constructor - */ - constructor( - private _authService: AuthService, - private _router: Router - ) - { - } -} diff --git a/src/app/modules/admin/pages/authentication/sign-out/modern-reversed/sign-out.component.html b/src/app/modules/admin/pages/authentication/sign-out/modern-reversed/sign-out.component.html deleted file mode 100644 index 710acc56..00000000 --- a/src/app/modules/admin/pages/authentication/sign-out/modern-reversed/sign-out.component.html +++ /dev/null @@ -1,85 +0,0 @@ -
-
- -
-
- -
- -
- - -
You have signed out!
-
- - - Redirecting in {{countdown | i18nPlural: countdownMapping }} - - - - - You are now being redirected! - -
- - -
- Go to - sign in - -
-
-
-
-
diff --git a/src/app/modules/admin/pages/authentication/sign-out/modern-reversed/sign-out.component.ts b/src/app/modules/admin/pages/authentication/sign-out/modern-reversed/sign-out.component.ts deleted file mode 100644 index d5985cf7..00000000 --- a/src/app/modules/admin/pages/authentication/sign-out/modern-reversed/sign-out.component.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; -import { FuseAnimations } from '@fuse/animations'; -import { AuthService } from 'app/core/auth/auth.service'; -import { Router } from '@angular/router'; - -@Component({ - selector : 'sign-out-modern-reversed', - templateUrl : './sign-out.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class SignOutModernReversedComponent -{ - countdown: number = 5; - countdownMapping: any = { - '=1' : '# second', - 'other': '# seconds' - }; - - /** - * Constructor - */ - constructor( - private _authService: AuthService, - private _router: Router - ) - { - } -} diff --git a/src/app/modules/admin/pages/authentication/sign-out/modern/sign-out.component.html b/src/app/modules/admin/pages/authentication/sign-out/modern/sign-out.component.html deleted file mode 100644 index c86c3dc4..00000000 --- a/src/app/modules/admin/pages/authentication/sign-out/modern/sign-out.component.html +++ /dev/null @@ -1,85 +0,0 @@ -
-
-
-
- -
- -
- - -
You have signed out!
-
- - - Redirecting in {{countdown | i18nPlural: countdownMapping }} - - - - - You are now being redirected! - -
- - -
- Go to - sign in - -
-
-
- -
-
diff --git a/src/app/modules/admin/pages/authentication/sign-out/modern/sign-out.component.ts b/src/app/modules/admin/pages/authentication/sign-out/modern/sign-out.component.ts deleted file mode 100644 index d6b0a70f..00000000 --- a/src/app/modules/admin/pages/authentication/sign-out/modern/sign-out.component.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; -import { FuseAnimations } from '@fuse/animations'; -import { AuthService } from 'app/core/auth/auth.service'; -import { Router } from '@angular/router'; - -@Component({ - selector : 'sign-out-modern', - templateUrl : './sign-out.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class SignOutModernComponent -{ - countdown: number = 5; - countdownMapping: any = { - '=1' : '# second', - 'other': '# seconds' - }; - - /** - * Constructor - */ - constructor( - private _authService: AuthService, - private _router: Router - ) - { - } -} diff --git a/src/app/modules/admin/pages/authentication/sign-out/sign-out.module.ts b/src/app/modules/admin/pages/authentication/sign-out/sign-out.module.ts deleted file mode 100644 index d58f8c49..00000000 --- a/src/app/modules/admin/pages/authentication/sign-out/sign-out.module.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatInputModule } from '@angular/material/input'; -import { SharedModule } from 'app/shared/shared.module'; -import { SignOutClassicComponent } from 'app/modules/admin/pages/authentication/sign-out/classic/sign-out.component'; -import { SignOutModernComponent } from 'app/modules/admin/pages/authentication/sign-out/modern/sign-out.component'; -import { SignOutModernReversedComponent } from 'app/modules/admin/pages/authentication/sign-out/modern-reversed/sign-out.component'; -import { SignOutFullscreenComponent } from 'app/modules/admin/pages/authentication/sign-out/fullscreen/sign-out.component'; -import { SignOutFullscreenReversedComponent } from 'app/modules/admin/pages/authentication/sign-out/fullscreen-reversed/sign-out.component'; -import { SignOutSplitScreenComponent } from 'app/modules/admin/pages/authentication/sign-out/split-screen/sign-out.component'; -import { SignOutSplitScreenReversedComponent } from 'app/modules/admin/pages/authentication/sign-out/split-screen-reversed/sign-out.component'; - -const routes: Routes = [ - { - path : 'sign-out', - children: [ - { - path : 'classic', - component: SignOutClassicComponent - }, - { - path : 'modern', - component: SignOutModernComponent - }, - { - path : 'modern-reversed', - component: SignOutModernReversedComponent - }, - { - path : 'split-screen', - component: SignOutSplitScreenComponent - }, - { - path : 'split-screen-reversed', - component: SignOutSplitScreenReversedComponent - }, - { - path : 'fullscreen', - component: SignOutFullscreenComponent - }, - { - path : 'fullscreen-reversed', - component: SignOutFullscreenReversedComponent - } - ] - } -]; - -@NgModule({ - declarations: [ - SignOutClassicComponent, - SignOutModernComponent, - SignOutModernReversedComponent, - SignOutFullscreenComponent, - SignOutFullscreenReversedComponent, - SignOutSplitScreenComponent, - SignOutSplitScreenReversedComponent - ], - imports : [ - RouterModule.forChild(routes), - MatFormFieldModule, - MatInputModule, - SharedModule - ] -}) -export class SignOutModule -{ -} diff --git a/src/app/modules/admin/pages/authentication/sign-out/split-screen-reversed/sign-out.component.html b/src/app/modules/admin/pages/authentication/sign-out/split-screen-reversed/sign-out.component.html deleted file mode 100644 index 3bf689e0..00000000 --- a/src/app/modules/admin/pages/authentication/sign-out/split-screen-reversed/sign-out.component.html +++ /dev/null @@ -1,83 +0,0 @@ -
- -
-
- -
- -
- - -
You have signed out!
-
- - - Redirecting in {{countdown | i18nPlural: countdownMapping }} - - - - - You are now being redirected! - -
- - -
- Go to - sign in - -
-
-
-
diff --git a/src/app/modules/admin/pages/authentication/sign-out/split-screen-reversed/sign-out.component.ts b/src/app/modules/admin/pages/authentication/sign-out/split-screen-reversed/sign-out.component.ts deleted file mode 100644 index 8279c157..00000000 --- a/src/app/modules/admin/pages/authentication/sign-out/split-screen-reversed/sign-out.component.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; -import { FuseAnimations } from '@fuse/animations'; -import { AuthService } from 'app/core/auth/auth.service'; -import { Router } from '@angular/router'; - -@Component({ - selector : 'sign-out-split-screen-reversed', - templateUrl : './sign-out.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class SignOutSplitScreenReversedComponent -{ - countdown: number = 5; - countdownMapping: any = { - '=1' : '# second', - 'other': '# seconds' - }; - - /** - * Constructor - */ - constructor( - private _authService: AuthService, - private _router: Router - ) - { - } -} diff --git a/src/app/modules/admin/pages/authentication/sign-out/split-screen/sign-out.component.html b/src/app/modules/admin/pages/authentication/sign-out/split-screen/sign-out.component.html deleted file mode 100644 index 19e3de33..00000000 --- a/src/app/modules/admin/pages/authentication/sign-out/split-screen/sign-out.component.html +++ /dev/null @@ -1,83 +0,0 @@ -
-
-
- -
- -
- - -
You have signed out!
-
- - - Redirecting in {{countdown | i18nPlural: countdownMapping }} - - - - - You are now being redirected! - -
- - -
- Go to - sign in - -
-
-
- -
diff --git a/src/app/modules/admin/pages/authentication/sign-out/split-screen/sign-out.component.ts b/src/app/modules/admin/pages/authentication/sign-out/split-screen/sign-out.component.ts deleted file mode 100644 index 13d99e8a..00000000 --- a/src/app/modules/admin/pages/authentication/sign-out/split-screen/sign-out.component.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; -import { FuseAnimations } from '@fuse/animations'; -import { AuthService } from 'app/core/auth/auth.service'; -import { Router } from '@angular/router'; - -@Component({ - selector : 'sign-out-split-screen', - templateUrl : './sign-out.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class SignOutSplitScreenComponent -{ - countdown: number = 5; - countdownMapping: any = { - '=1' : '# second', - 'other': '# seconds' - }; - - /** - * Constructor - */ - constructor( - private _authService: AuthService, - private _router: Router - ) - { - } -} diff --git a/src/app/modules/admin/pages/authentication/sign-up/classic/sign-up.component.html b/src/app/modules/admin/pages/authentication/sign-up/classic/sign-up.component.html deleted file mode 100644 index c4b82d1b..00000000 --- a/src/app/modules/admin/pages/authentication/sign-up/classic/sign-up.component.html +++ /dev/null @@ -1,136 +0,0 @@ -
-
-
- -
- -
- - -
Sign up
-
-
Already have an account?
- Sign in - -
- - - - {{alert.message}} - - - -
- - - - Full name - - - Full name is required - - - - - - Email address - - - Email address is required - - - Please enter a valid email address - - - - - - Password - - - - Password is required - - - - - - Company - - - - -
- - I agree to the - Terms of Service - - and - Privacy Policy - - -
- - - - -
-
-
-
diff --git a/src/app/modules/admin/pages/authentication/sign-up/classic/sign-up.component.ts b/src/app/modules/admin/pages/authentication/sign-up/classic/sign-up.component.ts deleted file mode 100644 index 08c3e076..00000000 --- a/src/app/modules/admin/pages/authentication/sign-up/classic/sign-up.component.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, NgForm, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; -import { AuthService } from 'app/core/auth/auth.service'; - -@Component({ - selector : 'sign-up-classic', - templateUrl : './sign-up.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class SignUpClassicComponent implements OnInit -{ - @ViewChild('signUpNgForm') signUpNgForm: NgForm; - - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - signUpForm: FormGroup; - showAlert: boolean = false; - - /** - * Constructor - */ - constructor( - private _authService: AuthService, - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.signUpForm = this._formBuilder.group({ - name : ['', Validators.required], - email : ['', [Validators.required, Validators.email]], - password : ['', Validators.required], - company : [''], - agreements: ['', Validators.requiredTrue] - } - ); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Sign in - */ - signUp(): void - { - } -} diff --git a/src/app/modules/admin/pages/authentication/sign-up/fullscreen-reversed/sign-up.component.html b/src/app/modules/admin/pages/authentication/sign-up/fullscreen-reversed/sign-up.component.html deleted file mode 100644 index b4c91707..00000000 --- a/src/app/modules/admin/pages/authentication/sign-up/fullscreen-reversed/sign-up.component.html +++ /dev/null @@ -1,186 +0,0 @@ -
- -
-
- -
- -
- - -
Sign up
-
-
Already have an account?
- Sign in - -
- - - - {{alert.message}} - - - -
- - - - Full name - - - Full name is required - - - - - - Email address - - - Email address is required - - - Please enter a valid email address - - - - - - Password - - - - Password is required - - - - - - Company - - - - -
- - I agree to the - Terms of Service - - and - Privacy Policy - - -
- - - - -
-
-
-
diff --git a/src/app/modules/admin/pages/authentication/sign-up/fullscreen-reversed/sign-up.component.ts b/src/app/modules/admin/pages/authentication/sign-up/fullscreen-reversed/sign-up.component.ts deleted file mode 100644 index 4e435aa6..00000000 --- a/src/app/modules/admin/pages/authentication/sign-up/fullscreen-reversed/sign-up.component.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, NgForm, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; -import { AuthService } from 'app/core/auth/auth.service'; - -@Component({ - selector : 'sign-up-fullscreen-reversed', - templateUrl : './sign-up.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class SignUpFullscreenReversedComponent implements OnInit -{ - @ViewChild('signUpNgForm') signUpNgForm: NgForm; - - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - signUpForm: FormGroup; - showAlert: boolean = false; - - /** - * Constructor - */ - constructor( - private _authService: AuthService, - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.signUpForm = this._formBuilder.group({ - name : ['', Validators.required], - email : ['', [Validators.required, Validators.email]], - password : ['', Validators.required], - company : [''], - agreements: ['', Validators.requiredTrue] - } - ); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Sign in - */ - signUp(): void - { - } -} diff --git a/src/app/modules/admin/pages/authentication/sign-up/fullscreen/sign-up.component.html b/src/app/modules/admin/pages/authentication/sign-up/fullscreen/sign-up.component.html deleted file mode 100644 index 87156d26..00000000 --- a/src/app/modules/admin/pages/authentication/sign-up/fullscreen/sign-up.component.html +++ /dev/null @@ -1,186 +0,0 @@ -
-
-
- -
- -
- - -
Sign up
-
-
Already have an account?
- Sign in - -
- - - - {{alert.message}} - - - -
- - - - Full name - - - Full name is required - - - - - - Email address - - - Email address is required - - - Please enter a valid email address - - - - - - Password - - - - Password is required - - - - - - Company - - - - -
- - I agree to the - Terms of Service - - and - Privacy Policy - - -
- - - - -
-
-
- -
diff --git a/src/app/modules/admin/pages/authentication/sign-up/fullscreen/sign-up.component.ts b/src/app/modules/admin/pages/authentication/sign-up/fullscreen/sign-up.component.ts deleted file mode 100644 index a0b3f422..00000000 --- a/src/app/modules/admin/pages/authentication/sign-up/fullscreen/sign-up.component.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, NgForm, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; -import { AuthService } from 'app/core/auth/auth.service'; - -@Component({ - selector : 'sign-up-fullscreen', - templateUrl : './sign-up.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class SignUpFullscreenComponent implements OnInit -{ - @ViewChild('signUpNgForm') signUpNgForm: NgForm; - - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - signUpForm: FormGroup; - showAlert: boolean = false; - - /** - * Constructor - */ - constructor( - private _authService: AuthService, - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.signUpForm = this._formBuilder.group({ - name : ['', Validators.required], - email : ['', [Validators.required, Validators.email]], - password : ['', Validators.required], - company : [''], - agreements: ['', Validators.requiredTrue] - } - ); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Sign in - */ - signUp(): void - { - } -} diff --git a/src/app/modules/admin/pages/authentication/sign-up/modern-reversed/sign-up.component.html b/src/app/modules/admin/pages/authentication/sign-up/modern-reversed/sign-up.component.html deleted file mode 100644 index 7cabef80..00000000 --- a/src/app/modules/admin/pages/authentication/sign-up/modern-reversed/sign-up.component.html +++ /dev/null @@ -1,188 +0,0 @@ -
-
- -
-
- -
- -
- - -
Sign up
-
-
Already have an account?
- Sign in - -
- - - - {{alert.message}} - - - -
- - - - Full name - - - Full name is required - - - - - - Email address - - - Email address is required - - - Please enter a valid email address - - - - - - Password - - - - Password is required - - - - - - Company - - - - -
- - I agree to the - Terms of Service - - and - Privacy Policy - - -
- - - - -
-
-
-
-
diff --git a/src/app/modules/admin/pages/authentication/sign-up/modern-reversed/sign-up.component.ts b/src/app/modules/admin/pages/authentication/sign-up/modern-reversed/sign-up.component.ts deleted file mode 100644 index b8e3438e..00000000 --- a/src/app/modules/admin/pages/authentication/sign-up/modern-reversed/sign-up.component.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, NgForm, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; -import { AuthService } from 'app/core/auth/auth.service'; - -@Component({ - selector : 'sign-up-modern-reversed', - templateUrl : './sign-up.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class SignUpModernReversedComponent implements OnInit -{ - @ViewChild('signUpNgForm') signUpNgForm: NgForm; - - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - signUpForm: FormGroup; - showAlert: boolean = false; - - /** - * Constructor - */ - constructor( - private _authService: AuthService, - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.signUpForm = this._formBuilder.group({ - name : ['', Validators.required], - email : ['', [Validators.required, Validators.email]], - password : ['', Validators.required], - company : [''], - agreements: ['', Validators.requiredTrue] - } - ); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Sign in - */ - signUp(): void - { - } -} diff --git a/src/app/modules/admin/pages/authentication/sign-up/modern/sign-up.component.html b/src/app/modules/admin/pages/authentication/sign-up/modern/sign-up.component.html deleted file mode 100644 index 20613a96..00000000 --- a/src/app/modules/admin/pages/authentication/sign-up/modern/sign-up.component.html +++ /dev/null @@ -1,188 +0,0 @@ -
-
-
-
- -
- -
- - -
Sign up
-
-
Already have an account?
- Sign in - -
- - - - {{alert.message}} - - - -
- - - - Full name - - - Full name is required - - - - - - Email address - - - Email address is required - - - Please enter a valid email address - - - - - - Password - - - - Password is required - - - - - - Company - - - - -
- - I agree to the - Terms of Service - - and - Privacy Policy - - -
- - - - -
-
-
- -
-
diff --git a/src/app/modules/admin/pages/authentication/sign-up/modern/sign-up.component.ts b/src/app/modules/admin/pages/authentication/sign-up/modern/sign-up.component.ts deleted file mode 100644 index 5e05ea70..00000000 --- a/src/app/modules/admin/pages/authentication/sign-up/modern/sign-up.component.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, NgForm, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; -import { AuthService } from 'app/core/auth/auth.service'; - -@Component({ - selector : 'sign-up-modern', - templateUrl : './sign-up.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class SignUpModernComponent implements OnInit -{ - @ViewChild('signUpNgForm') signUpNgForm: NgForm; - - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - signUpForm: FormGroup; - showAlert: boolean = false; - - /** - * Constructor - */ - constructor( - private _authService: AuthService, - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.signUpForm = this._formBuilder.group({ - name : ['', Validators.required], - email : ['', [Validators.required, Validators.email]], - password : ['', Validators.required], - company : [''], - agreements: ['', Validators.requiredTrue] - } - ); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Sign in - */ - signUp(): void - { - } -} diff --git a/src/app/modules/admin/pages/authentication/sign-up/sign-up.module.ts b/src/app/modules/admin/pages/authentication/sign-up/sign-up.module.ts deleted file mode 100644 index bea37358..00000000 --- a/src/app/modules/admin/pages/authentication/sign-up/sign-up.module.ts +++ /dev/null @@ -1,79 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; -import { MatButtonModule } from '@angular/material/button'; -import { MatCheckboxModule } from '@angular/material/checkbox'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatIconModule } from '@angular/material/icon'; -import { MatInputModule } from '@angular/material/input'; -import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; -import { FuseAlertModule } from '@fuse/components/alert'; -import { SharedModule } from 'app/shared/shared.module'; -import { SignUpClassicComponent } from 'app/modules/admin/pages/authentication/sign-up/classic/sign-up.component'; -import { SignUpModernComponent } from 'app/modules/admin/pages/authentication/sign-up/modern/sign-up.component'; -import { SignUpModernReversedComponent } from 'app/modules/admin/pages/authentication/sign-up/modern-reversed/sign-up.component'; -import { SignUpFullscreenComponent } from 'app/modules/admin/pages/authentication/sign-up/fullscreen/sign-up.component'; -import { SignUpFullscreenReversedComponent } from 'app/modules/admin/pages/authentication/sign-up/fullscreen-reversed/sign-up.component'; -import { SignUpSplitScreenComponent } from 'app/modules/admin/pages/authentication/sign-up/split-screen/sign-up.component'; -import { SignUpSplitScreenReversedComponent } from 'app/modules/admin/pages/authentication/sign-up/split-screen-reversed/sign-up.component'; - -const routes: Routes = [ - { - path : 'sign-up', - children: [ - { - path : 'classic', - component: SignUpClassicComponent - }, - { - path : 'modern', - component: SignUpModernComponent - }, - { - path : 'modern-reversed', - component: SignUpModernReversedComponent - }, - { - path : 'split-screen', - component: SignUpSplitScreenComponent - }, - { - path : 'split-screen-reversed', - component: SignUpSplitScreenReversedComponent - }, - { - path : 'fullscreen', - component: SignUpFullscreenComponent - }, - { - path : 'fullscreen-reversed', - component: SignUpFullscreenReversedComponent - } - ] - } -]; - -@NgModule({ - declarations: [ - SignUpClassicComponent, - SignUpModernComponent, - SignUpModernReversedComponent, - SignUpFullscreenComponent, - SignUpFullscreenReversedComponent, - SignUpSplitScreenComponent, - SignUpSplitScreenReversedComponent - ], - imports : [ - RouterModule.forChild(routes), - MatButtonModule, - MatCheckboxModule, - MatFormFieldModule, - MatIconModule, - MatInputModule, - MatProgressSpinnerModule, - FuseAlertModule, - SharedModule - ] -}) -export class SignUpModule -{ -} diff --git a/src/app/modules/admin/pages/authentication/sign-up/split-screen-reversed/sign-up.component.html b/src/app/modules/admin/pages/authentication/sign-up/split-screen-reversed/sign-up.component.html deleted file mode 100644 index 8360abfd..00000000 --- a/src/app/modules/admin/pages/authentication/sign-up/split-screen-reversed/sign-up.component.html +++ /dev/null @@ -1,186 +0,0 @@ -
- -
-
- -
- -
- - -
Sign up
-
-
Already have an account?
- Sign in - -
- - - - {{alert.message}} - - - -
- - - - Full name - - - Full name is required - - - - - - Email address - - - Email address is required - - - Please enter a valid email address - - - - - - Password - - - - Password is required - - - - - - Company - - - - -
- - I agree to the - Terms of Service - - and - Privacy Policy - - -
- - - - -
-
-
-
diff --git a/src/app/modules/admin/pages/authentication/sign-up/split-screen-reversed/sign-up.component.ts b/src/app/modules/admin/pages/authentication/sign-up/split-screen-reversed/sign-up.component.ts deleted file mode 100644 index a5e765cf..00000000 --- a/src/app/modules/admin/pages/authentication/sign-up/split-screen-reversed/sign-up.component.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, NgForm, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; -import { AuthService } from 'app/core/auth/auth.service'; - -@Component({ - selector : 'sign-up-split-screen-reversed', - templateUrl : './sign-up.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class SignUpSplitScreenReversedComponent implements OnInit -{ - @ViewChild('signUpNgForm') signUpNgForm: NgForm; - - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - signUpForm: FormGroup; - showAlert: boolean = false; - - /** - * Constructor - */ - constructor( - private _authService: AuthService, - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.signUpForm = this._formBuilder.group({ - name : ['', Validators.required], - email : ['', [Validators.required, Validators.email]], - password : ['', Validators.required], - company : [''], - agreements: ['', Validators.requiredTrue] - } - ); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Sign in - */ - signUp(): void - { - } -} diff --git a/src/app/modules/admin/pages/authentication/sign-up/split-screen/sign-up.component.html b/src/app/modules/admin/pages/authentication/sign-up/split-screen/sign-up.component.html deleted file mode 100644 index bbe0904d..00000000 --- a/src/app/modules/admin/pages/authentication/sign-up/split-screen/sign-up.component.html +++ /dev/null @@ -1,186 +0,0 @@ -
-
-
- -
- -
- - -
Sign up
-
-
Already have an account?
- Sign in - -
- - - - {{alert.message}} - - - -
- - - - Full name - - - Full name is required - - - - - - Email address - - - Email address is required - - - Please enter a valid email address - - - - - - Password - - - - Password is required - - - - - - Company - - - - -
- - I agree to the - Terms of Service - - and - Privacy Policy - - -
- - - - -
-
-
- -
diff --git a/src/app/modules/admin/pages/authentication/sign-up/split-screen/sign-up.component.ts b/src/app/modules/admin/pages/authentication/sign-up/split-screen/sign-up.component.ts deleted file mode 100644 index b6dbf8e6..00000000 --- a/src/app/modules/admin/pages/authentication/sign-up/split-screen/sign-up.component.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, NgForm, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; -import { AuthService } from 'app/core/auth/auth.service'; - -@Component({ - selector : 'sign-up-split-screen', - templateUrl : './sign-up.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class SignUpSplitScreenComponent implements OnInit -{ - @ViewChild('signUpNgForm') signUpNgForm: NgForm; - - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - signUpForm: FormGroup; - showAlert: boolean = false; - - /** - * Constructor - */ - constructor( - private _authService: AuthService, - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.signUpForm = this._formBuilder.group({ - name : ['', Validators.required], - email : ['', [Validators.required, Validators.email]], - password : ['', Validators.required], - company : [''], - agreements: ['', Validators.requiredTrue] - } - ); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Sign in - */ - signUp(): void - { - } -} diff --git a/src/app/modules/admin/pages/authentication/unlock-session/classic/unlock-session.component.html b/src/app/modules/admin/pages/authentication/unlock-session/classic/unlock-session.component.html deleted file mode 100644 index 9ceec621..00000000 --- a/src/app/modules/admin/pages/authentication/unlock-session/classic/unlock-session.component.html +++ /dev/null @@ -1,94 +0,0 @@ -
-
-
- -
- -
- - -
Unlock your session
-
Your session is locked due to inactivity
- - - - {{alert.message}} - - - -
- - - - Full name - - - - - - Password - - - - Password is required - - - - - - - -
- I'm not - {{name}} -
- -
-
-
-
diff --git a/src/app/modules/admin/pages/authentication/unlock-session/classic/unlock-session.component.ts b/src/app/modules/admin/pages/authentication/unlock-session/classic/unlock-session.component.ts deleted file mode 100644 index 3ffa68f2..00000000 --- a/src/app/modules/admin/pages/authentication/unlock-session/classic/unlock-session.component.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, NgForm, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; - -@Component({ - selector : 'unlock-session-classic', - templateUrl : './unlock-session.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class UnlockSessionClassicComponent implements OnInit -{ - @ViewChild('unlockSessionNgForm') unlockSessionNgForm: NgForm; - - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - name: string = 'Brian Hughes'; - showAlert: boolean = false; - unlockSessionForm: FormGroup; - - /** - * Constructor - */ - constructor( - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.unlockSessionForm = this._formBuilder.group({ - name : [ - { - value : this.name, - disabled: true - } - ], - password: ['', Validators.required] - }); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Unlock - */ - unlock(): void - { - } -} diff --git a/src/app/modules/admin/pages/authentication/unlock-session/fullscreen-reversed/unlock-session.component.html b/src/app/modules/admin/pages/authentication/unlock-session/fullscreen-reversed/unlock-session.component.html deleted file mode 100644 index e8a42f59..00000000 --- a/src/app/modules/admin/pages/authentication/unlock-session/fullscreen-reversed/unlock-session.component.html +++ /dev/null @@ -1,144 +0,0 @@ -
- -
-
- -
- -
- - -
Unlock your session
-
Your session is locked due to inactivity
- - - - {{alert.message}} - - - -
- - - - Full name - - - - - - Password - - - - Password is required - - - - - - - -
- I'm not - {{name}} -
- -
-
-
-
diff --git a/src/app/modules/admin/pages/authentication/unlock-session/fullscreen-reversed/unlock-session.component.ts b/src/app/modules/admin/pages/authentication/unlock-session/fullscreen-reversed/unlock-session.component.ts deleted file mode 100644 index b61091ff..00000000 --- a/src/app/modules/admin/pages/authentication/unlock-session/fullscreen-reversed/unlock-session.component.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, NgForm, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; - -@Component({ - selector : 'unlock-session-fullscreen-reversed', - templateUrl : './unlock-session.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class UnlockSessionFullscreenReversedComponent implements OnInit -{ - @ViewChild('unlockSessionNgForm') unlockSessionNgForm: NgForm; - - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - name: string = 'Brian Hughes'; - showAlert: boolean = false; - unlockSessionForm: FormGroup; - - /** - * Constructor - */ - constructor( - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.unlockSessionForm = this._formBuilder.group({ - name : [ - { - value : this.name, - disabled: true - } - ], - password: ['', Validators.required] - }); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Unlock - */ - unlock(): void - { - } -} diff --git a/src/app/modules/admin/pages/authentication/unlock-session/fullscreen/unlock-session.component.html b/src/app/modules/admin/pages/authentication/unlock-session/fullscreen/unlock-session.component.html deleted file mode 100644 index 79413f3d..00000000 --- a/src/app/modules/admin/pages/authentication/unlock-session/fullscreen/unlock-session.component.html +++ /dev/null @@ -1,144 +0,0 @@ -
-
-
- -
- -
- - -
Unlock your session
-
Your session is locked due to inactivity
- - - - {{alert.message}} - - - -
- - - - Full name - - - - - - Password - - - - Password is required - - - - - - - -
- I'm not - {{name}} -
- -
-
-
- -
diff --git a/src/app/modules/admin/pages/authentication/unlock-session/fullscreen/unlock-session.component.ts b/src/app/modules/admin/pages/authentication/unlock-session/fullscreen/unlock-session.component.ts deleted file mode 100644 index f198b6da..00000000 --- a/src/app/modules/admin/pages/authentication/unlock-session/fullscreen/unlock-session.component.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, NgForm, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; - -@Component({ - selector : 'unlock-session-fullscreen', - templateUrl : './unlock-session.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class UnlockSessionFullscreenComponent implements OnInit -{ - @ViewChild('unlockSessionNgForm') unlockSessionNgForm: NgForm; - - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - name: string = 'Brian Hughes'; - showAlert: boolean = false; - unlockSessionForm: FormGroup; - - /** - * Constructor - */ - constructor( - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.unlockSessionForm = this._formBuilder.group({ - name : [ - { - value : this.name, - disabled: true - } - ], - password: ['', Validators.required] - }); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Unlock - */ - unlock(): void - { - } -} diff --git a/src/app/modules/admin/pages/authentication/unlock-session/modern-reversed/unlock-session.component.html b/src/app/modules/admin/pages/authentication/unlock-session/modern-reversed/unlock-session.component.html deleted file mode 100644 index c7c64da1..00000000 --- a/src/app/modules/admin/pages/authentication/unlock-session/modern-reversed/unlock-session.component.html +++ /dev/null @@ -1,146 +0,0 @@ -
-
- -
-
- -
- -
- - -
Unlock your session
-
Your session is locked due to inactivity
- - - - {{alert.message}} - - - -
- - - - Full name - - - - - - Password - - - - Password is required - - - - - - - -
- I'm not - {{name}} -
- -
-
-
-
-
diff --git a/src/app/modules/admin/pages/authentication/unlock-session/modern-reversed/unlock-session.component.ts b/src/app/modules/admin/pages/authentication/unlock-session/modern-reversed/unlock-session.component.ts deleted file mode 100644 index 19878703..00000000 --- a/src/app/modules/admin/pages/authentication/unlock-session/modern-reversed/unlock-session.component.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, NgForm, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; - -@Component({ - selector : 'unlock-session-modern-reversed', - templateUrl : './unlock-session.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class UnlockSessionModernReversedComponent implements OnInit -{ - @ViewChild('unlockSessionNgForm') unlockSessionNgForm: NgForm; - - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - name: string = 'Brian Hughes'; - showAlert: boolean = false; - unlockSessionForm: FormGroup; - - /** - * Constructor - */ - constructor( - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.unlockSessionForm = this._formBuilder.group({ - name : [ - { - value : this.name, - disabled: true - } - ], - password: ['', Validators.required] - }); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Unlock - */ - unlock(): void - { - } -} diff --git a/src/app/modules/admin/pages/authentication/unlock-session/modern/unlock-session.component.html b/src/app/modules/admin/pages/authentication/unlock-session/modern/unlock-session.component.html deleted file mode 100644 index e982880e..00000000 --- a/src/app/modules/admin/pages/authentication/unlock-session/modern/unlock-session.component.html +++ /dev/null @@ -1,146 +0,0 @@ -
-
-
-
- -
- -
- - -
Unlock your session
-
Your session is locked due to inactivity
- - - - {{alert.message}} - - - -
- - - - Full name - - - - - - Password - - - - Password is required - - - - - - - -
- I'm not - {{name}} -
- -
-
-
- -
-
diff --git a/src/app/modules/admin/pages/authentication/unlock-session/modern/unlock-session.component.ts b/src/app/modules/admin/pages/authentication/unlock-session/modern/unlock-session.component.ts deleted file mode 100644 index 2feaab70..00000000 --- a/src/app/modules/admin/pages/authentication/unlock-session/modern/unlock-session.component.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, NgForm, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; - -@Component({ - selector : 'unlock-session-modern', - templateUrl : './unlock-session.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class UnlockSessionModernComponent implements OnInit -{ - @ViewChild('unlockSessionNgForm') unlockSessionNgForm: NgForm; - - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - name: string = 'Brian Hughes'; - showAlert: boolean = false; - unlockSessionForm: FormGroup; - - /** - * Constructor - */ - constructor( - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.unlockSessionForm = this._formBuilder.group({ - name : [ - { - value : this.name, - disabled: true - } - ], - password: ['', Validators.required] - }); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Unlock - */ - unlock(): void - { - } -} diff --git a/src/app/modules/admin/pages/authentication/unlock-session/split-screen-reversed/unlock-session.component.html b/src/app/modules/admin/pages/authentication/unlock-session/split-screen-reversed/unlock-session.component.html deleted file mode 100644 index 9cc65ec7..00000000 --- a/src/app/modules/admin/pages/authentication/unlock-session/split-screen-reversed/unlock-session.component.html +++ /dev/null @@ -1,144 +0,0 @@ -
- -
-
- -
- -
- - -
Unlock your session
-
Your session is locked due to inactivity
- - - - {{alert.message}} - - - -
- - - - Full name - - - - - - Password - - - - Password is required - - - - - - - -
- I'm not - {{name}} -
- -
-
-
-
diff --git a/src/app/modules/admin/pages/authentication/unlock-session/split-screen-reversed/unlock-session.component.ts b/src/app/modules/admin/pages/authentication/unlock-session/split-screen-reversed/unlock-session.component.ts deleted file mode 100644 index 3a6d38ea..00000000 --- a/src/app/modules/admin/pages/authentication/unlock-session/split-screen-reversed/unlock-session.component.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, NgForm, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; - -@Component({ - selector : 'unlock-session-split-screen-reversed', - templateUrl : './unlock-session.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class UnlockSessionSplitScreenReversedComponent implements OnInit -{ - @ViewChild('unlockSessionNgForm') unlockSessionNgForm: NgForm; - - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - name: string = 'Brian Hughes'; - showAlert: boolean = false; - unlockSessionForm: FormGroup; - - /** - * Constructor - */ - constructor( - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.unlockSessionForm = this._formBuilder.group({ - name : [ - { - value : this.name, - disabled: true - } - ], - password: ['', Validators.required] - }); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Unlock - */ - unlock(): void - { - } -} diff --git a/src/app/modules/admin/pages/authentication/unlock-session/split-screen/unlock-session.component.html b/src/app/modules/admin/pages/authentication/unlock-session/split-screen/unlock-session.component.html deleted file mode 100644 index 520a99e8..00000000 --- a/src/app/modules/admin/pages/authentication/unlock-session/split-screen/unlock-session.component.html +++ /dev/null @@ -1,144 +0,0 @@ -
-
-
- -
- -
- - -
Unlock your session
-
Your session is locked due to inactivity
- - - - {{alert.message}} - - - -
- - - - Full name - - - - - - Password - - - - Password is required - - - - - - - -
- I'm not - {{name}} -
- -
-
-
- -
diff --git a/src/app/modules/admin/pages/authentication/unlock-session/split-screen/unlock-session.component.ts b/src/app/modules/admin/pages/authentication/unlock-session/split-screen/unlock-session.component.ts deleted file mode 100644 index 303d8061..00000000 --- a/src/app/modules/admin/pages/authentication/unlock-session/split-screen/unlock-session.component.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, NgForm, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; - -@Component({ - selector : 'unlock-session-split-screen', - templateUrl : './unlock-session.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class UnlockSessionSplitScreenComponent implements OnInit -{ - @ViewChild('unlockSessionNgForm') unlockSessionNgForm: NgForm; - - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - name: string = 'Brian Hughes'; - showAlert: boolean = false; - unlockSessionForm: FormGroup; - - /** - * Constructor - */ - constructor( - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.unlockSessionForm = this._formBuilder.group({ - name : [ - { - value : this.name, - disabled: true - } - ], - password: ['', Validators.required] - }); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Unlock - */ - unlock(): void - { - } -} diff --git a/src/app/modules/admin/pages/authentication/unlock-session/unlock-session.module.ts b/src/app/modules/admin/pages/authentication/unlock-session/unlock-session.module.ts deleted file mode 100644 index 812bd509..00000000 --- a/src/app/modules/admin/pages/authentication/unlock-session/unlock-session.module.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; -import { MatButtonModule } from '@angular/material/button'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatIconModule } from '@angular/material/icon'; -import { MatInputModule } from '@angular/material/input'; -import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; -import { FuseAlertModule } from '@fuse/components/alert'; -import { SharedModule } from 'app/shared/shared.module'; -import { UnlockSessionClassicComponent } from 'app/modules/admin/pages/authentication/unlock-session/classic/unlock-session.component'; -import { UnlockSessionModernComponent } from 'app/modules/admin/pages/authentication/unlock-session/modern/unlock-session.component'; -import { UnlockSessionModernReversedComponent } from 'app/modules/admin/pages/authentication/unlock-session/modern-reversed/unlock-session.component'; -import { UnlockSessionFullscreenComponent } from 'app/modules/admin/pages/authentication/unlock-session/fullscreen/unlock-session.component'; -import { UnlockSessionFullscreenReversedComponent } from 'app/modules/admin/pages/authentication/unlock-session/fullscreen-reversed/unlock-session.component'; -import { UnlockSessionSplitScreenComponent } from 'app/modules/admin/pages/authentication/unlock-session/split-screen/unlock-session.component'; -import { UnlockSessionSplitScreenReversedComponent } from 'app/modules/admin/pages/authentication/unlock-session/split-screen-reversed/unlock-session.component'; - -const routes: Routes = [ - { - path : 'unlock-session', - children: [ - { - path : 'classic', - component: UnlockSessionClassicComponent - }, - { - path : 'modern', - component: UnlockSessionModernComponent - }, - { - path : 'modern-reversed', - component: UnlockSessionModernReversedComponent - }, - { - path : 'split-screen', - component: UnlockSessionSplitScreenComponent - }, - { - path : 'split-screen-reversed', - component: UnlockSessionSplitScreenReversedComponent - }, - { - path : 'fullscreen', - component: UnlockSessionFullscreenComponent - }, - { - path : 'fullscreen-reversed', - component: UnlockSessionFullscreenReversedComponent - } - ] - } -]; - -@NgModule({ - declarations: [ - UnlockSessionClassicComponent, - UnlockSessionModernComponent, - UnlockSessionModernReversedComponent, - UnlockSessionFullscreenComponent, - UnlockSessionFullscreenReversedComponent, - UnlockSessionSplitScreenComponent, - UnlockSessionSplitScreenReversedComponent - ], - imports : [ - RouterModule.forChild(routes), - MatButtonModule, - MatFormFieldModule, - MatIconModule, - MatInputModule, - MatProgressSpinnerModule, - FuseAlertModule, - SharedModule - ] -}) -export class UnlockSessionModule -{ -} diff --git a/src/app/modules/admin/pages/coming-soon/classic/coming-soon.component.html b/src/app/modules/admin/pages/coming-soon/classic/coming-soon.component.html deleted file mode 100644 index fa3d98f5..00000000 --- a/src/app/modules/admin/pages/coming-soon/classic/coming-soon.component.html +++ /dev/null @@ -1,73 +0,0 @@ -
-
-
- -
- -
- - -
Almost there!
-
- Do you want to be notified when we are ready? Register below so we can notify you about the launch! -
- - - - {{alert.message}} - - - -
- - - - Email address - - - Email address is required - - - Please enter a valid email address - - - - - - - -
- This isn't a newsletter subscription. We will send one email to you when - we launch and then you will be removed from the list. -
- -
-
-
-
diff --git a/src/app/modules/admin/pages/coming-soon/classic/coming-soon.component.ts b/src/app/modules/admin/pages/coming-soon/classic/coming-soon.component.ts deleted file mode 100644 index 9db9235b..00000000 --- a/src/app/modules/admin/pages/coming-soon/classic/coming-soon.component.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, NgForm, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; -import { AuthService } from 'app/core/auth/auth.service'; - -@Component({ - selector : 'coming-soon-classic', - templateUrl : './coming-soon.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class ComingSoonClassicComponent implements OnInit -{ - @ViewChild('comingSoonNgForm') comingSoonNgForm: NgForm; - - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - comingSoonForm: FormGroup; - showAlert: boolean = false; - - /** - * Constructor - */ - constructor( - private _authService: AuthService, - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.comingSoonForm = this._formBuilder.group({ - email: ['', [Validators.required, Validators.email]] - }); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Sign in - */ - register(): void - { - // Return if the form is invalid - if ( this.comingSoonForm.invalid ) - { - return; - } - - // Disable the form - this.comingSoonForm.disable(); - - // Hide the alert - this.showAlert = false; - - // Do your action here... - // Emulate server delay - setTimeout(() => { - - // Re-enable the form - this.comingSoonForm.enable(); - - // Reset the form - this.comingSoonNgForm.resetForm(); - - // Set the alert - this.alert = { - type : 'success', - message: 'You have been registered to the list.' - }; - - }, 1000); - } -} diff --git a/src/app/modules/admin/pages/coming-soon/coming-soon.module.ts b/src/app/modules/admin/pages/coming-soon/coming-soon.module.ts deleted file mode 100644 index 65385b3f..00000000 --- a/src/app/modules/admin/pages/coming-soon/coming-soon.module.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; -import { MatButtonModule } from '@angular/material/button'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatIconModule } from '@angular/material/icon'; -import { MatInputModule } from '@angular/material/input'; -import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; -import { FuseCardModule } from '@fuse/components/card'; -import { FuseAlertModule } from '@fuse/components/alert'; -import { SharedModule } from 'app/shared/shared.module'; -import { ComingSoonClassicComponent } from 'app/modules/admin/pages/coming-soon/classic/coming-soon.component'; -import { ComingSoonModernComponent } from 'app/modules/admin/pages/coming-soon/modern/coming-soon.component'; -import { ComingSoonModernReversedComponent } from 'app/modules/admin/pages/coming-soon/modern-reversed/coming-soon.component'; -import { ComingSoonSplitScreenComponent } from 'app/modules/admin/pages/coming-soon/split-screen/coming-soon.component'; -import { ComingSoonSplitScreenReversedComponent } from 'app/modules/admin/pages/coming-soon/split-screen-reversed/coming-soon.component'; -import { ComingSoonFullscreenComponent } from 'app/modules/admin/pages/coming-soon/fullscreen/coming-soon.component'; -import { ComingSoonFullscreenReversedComponent } from 'app/modules/admin/pages/coming-soon/fullscreen-reversed/coming-soon.component'; - -const routes: Routes = [ - { - path : 'classic', - component: ComingSoonClassicComponent - }, - { - path : 'modern', - component: ComingSoonModernComponent - }, - { - path : 'modern-reversed', - component: ComingSoonModernReversedComponent - }, - { - path : 'split-screen', - component: ComingSoonSplitScreenComponent - }, - { - path : 'split-screen-reversed', - component: ComingSoonSplitScreenReversedComponent - }, - { - path : 'fullscreen', - component: ComingSoonFullscreenComponent - }, - { - path : 'fullscreen-reversed', - component: ComingSoonFullscreenReversedComponent - } -]; - -@NgModule({ - declarations: [ - ComingSoonClassicComponent, - ComingSoonModernComponent, - ComingSoonModernReversedComponent, - ComingSoonFullscreenComponent, - ComingSoonFullscreenReversedComponent, - ComingSoonSplitScreenComponent, - ComingSoonSplitScreenReversedComponent - ], - imports : [ - RouterModule.forChild(routes), - MatButtonModule, - MatFormFieldModule, - MatIconModule, - MatInputModule, - MatProgressSpinnerModule, - FuseCardModule, - FuseAlertModule, - SharedModule - ] -}) -export class ComingSoonModule -{ -} diff --git a/src/app/modules/admin/pages/coming-soon/fullscreen-reversed/coming-soon.component.html b/src/app/modules/admin/pages/coming-soon/fullscreen-reversed/coming-soon.component.html deleted file mode 100644 index 32c2fc11..00000000 --- a/src/app/modules/admin/pages/coming-soon/fullscreen-reversed/coming-soon.component.html +++ /dev/null @@ -1,123 +0,0 @@ -
- -
-
- -
- -
- - -
Almost there!
-
- Do you want to be notified when we are ready? Register below so we can notify you about the launch! -
- - - - {{alert.message}} - - - -
- - - - Email address - - - Email address is required - - - Please enter a valid email address - - - - - - - -
- This isn't a newsletter subscription. We will send one email to you when - we launch and then you will be removed from the list. -
- -
-
-
-
diff --git a/src/app/modules/admin/pages/coming-soon/fullscreen-reversed/coming-soon.component.ts b/src/app/modules/admin/pages/coming-soon/fullscreen-reversed/coming-soon.component.ts deleted file mode 100644 index 28fa10c1..00000000 --- a/src/app/modules/admin/pages/coming-soon/fullscreen-reversed/coming-soon.component.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, NgForm, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; -import { AuthService } from 'app/core/auth/auth.service'; - -@Component({ - selector : 'coming-soon-classic', - templateUrl : './coming-soon.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class ComingSoonFullscreenReversedComponent implements OnInit -{ - @ViewChild('comingSoonNgForm') comingSoonNgForm: NgForm; - - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - comingSoonForm: FormGroup; - showAlert: boolean = false; - - /** - * Constructor - */ - constructor( - private _authService: AuthService, - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.comingSoonForm = this._formBuilder.group({ - email: ['', [Validators.required, Validators.email]] - }); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Sign in - */ - register(): void - { - // Return if the form is invalid - if ( this.comingSoonForm.invalid ) - { - return; - } - - // Disable the form - this.comingSoonForm.disable(); - - // Hide the alert - this.showAlert = false; - - // Do your action here... - // Emulate server delay - setTimeout(() => { - - // Re-enable the form - this.comingSoonForm.enable(); - - // Reset the form - this.comingSoonNgForm.resetForm(); - - // Set the alert - this.alert = { - type : 'success', - message: 'You have been registered to the list.' - }; - - }, 1000); - } -} diff --git a/src/app/modules/admin/pages/coming-soon/fullscreen/coming-soon.component.html b/src/app/modules/admin/pages/coming-soon/fullscreen/coming-soon.component.html deleted file mode 100644 index c92d934a..00000000 --- a/src/app/modules/admin/pages/coming-soon/fullscreen/coming-soon.component.html +++ /dev/null @@ -1,123 +0,0 @@ -
-
-
- -
- -
- - -
Almost there!
-
- Do you want to be notified when we are ready? Register below so we can notify you about the launch! -
- - - - {{alert.message}} - - - -
- - - - Email address - - - Email address is required - - - Please enter a valid email address - - - - - - - -
- This isn't a newsletter subscription. We will send one email to you when - we launch and then you will be removed from the list. -
- -
-
-
- -
diff --git a/src/app/modules/admin/pages/coming-soon/fullscreen/coming-soon.component.ts b/src/app/modules/admin/pages/coming-soon/fullscreen/coming-soon.component.ts deleted file mode 100644 index 95f3a109..00000000 --- a/src/app/modules/admin/pages/coming-soon/fullscreen/coming-soon.component.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, NgForm, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; -import { AuthService } from 'app/core/auth/auth.service'; - -@Component({ - selector : 'coming-soon-classic', - templateUrl : './coming-soon.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class ComingSoonFullscreenComponent implements OnInit -{ - @ViewChild('comingSoonNgForm') comingSoonNgForm: NgForm; - - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - comingSoonForm: FormGroup; - showAlert: boolean = false; - - /** - * Constructor - */ - constructor( - private _authService: AuthService, - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.comingSoonForm = this._formBuilder.group({ - email: ['', [Validators.required, Validators.email]] - }); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Sign in - */ - register(): void - { - // Return if the form is invalid - if ( this.comingSoonForm.invalid ) - { - return; - } - - // Disable the form - this.comingSoonForm.disable(); - - // Hide the alert - this.showAlert = false; - - // Do your action here... - // Emulate server delay - setTimeout(() => { - - // Re-enable the form - this.comingSoonForm.enable(); - - // Reset the form - this.comingSoonNgForm.resetForm(); - - // Set the alert - this.alert = { - type : 'success', - message: 'You have been registered to the list.' - }; - - }, 1000); - } -} diff --git a/src/app/modules/admin/pages/coming-soon/modern-reversed/coming-soon.component.html b/src/app/modules/admin/pages/coming-soon/modern-reversed/coming-soon.component.html deleted file mode 100644 index 1bd5f43e..00000000 --- a/src/app/modules/admin/pages/coming-soon/modern-reversed/coming-soon.component.html +++ /dev/null @@ -1,125 +0,0 @@ -
-
- -
-
- -
- -
- - -
Almost there!
-
- Do you want to be notified when we are ready? Register below so we can notify you about the launch! -
- - - - {{alert.message}} - - - -
- - - - Email address - - - Email address is required - - - Please enter a valid email address - - - - - - - -
- This isn't a newsletter subscription. We will send one email to you when - we launch and then you will be removed from the list. -
- -
-
-
-
-
diff --git a/src/app/modules/admin/pages/coming-soon/modern-reversed/coming-soon.component.ts b/src/app/modules/admin/pages/coming-soon/modern-reversed/coming-soon.component.ts deleted file mode 100644 index cdc9d9fa..00000000 --- a/src/app/modules/admin/pages/coming-soon/modern-reversed/coming-soon.component.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, NgForm, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; -import { AuthService } from 'app/core/auth/auth.service'; - -@Component({ - selector : 'coming-soon-classic', - templateUrl : './coming-soon.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class ComingSoonModernReversedComponent implements OnInit -{ - @ViewChild('comingSoonNgForm') comingSoonNgForm: NgForm; - - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - comingSoonForm: FormGroup; - showAlert: boolean = false; - - /** - * Constructor - */ - constructor( - private _authService: AuthService, - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.comingSoonForm = this._formBuilder.group({ - email: ['', [Validators.required, Validators.email]] - }); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Sign in - */ - register(): void - { - // Return if the form is invalid - if ( this.comingSoonForm.invalid ) - { - return; - } - - // Disable the form - this.comingSoonForm.disable(); - - // Hide the alert - this.showAlert = false; - - // Do your action here... - // Emulate server delay - setTimeout(() => { - - // Re-enable the form - this.comingSoonForm.enable(); - - // Reset the form - this.comingSoonNgForm.resetForm(); - - // Set the alert - this.alert = { - type : 'success', - message: 'You have been registered to the list.' - }; - - }, 1000); - } -} diff --git a/src/app/modules/admin/pages/coming-soon/modern/coming-soon.component.html b/src/app/modules/admin/pages/coming-soon/modern/coming-soon.component.html deleted file mode 100644 index 3a083b52..00000000 --- a/src/app/modules/admin/pages/coming-soon/modern/coming-soon.component.html +++ /dev/null @@ -1,125 +0,0 @@ -
-
-
-
- -
- -
- - -
Almost there!
-
- Do you want to be notified when we are ready? Register below so we can notify you about the launch! -
- - - - {{alert.message}} - - - -
- - - - Email address - - - Email address is required - - - Please enter a valid email address - - - - - - - -
- This isn't a newsletter subscription. We will send one email to you when - we launch and then you will be removed from the list. -
- -
-
-
- -
-
diff --git a/src/app/modules/admin/pages/coming-soon/modern/coming-soon.component.ts b/src/app/modules/admin/pages/coming-soon/modern/coming-soon.component.ts deleted file mode 100644 index 3bf570dc..00000000 --- a/src/app/modules/admin/pages/coming-soon/modern/coming-soon.component.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, NgForm, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; -import { AuthService } from 'app/core/auth/auth.service'; - -@Component({ - selector : 'coming-soon-classic', - templateUrl : './coming-soon.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class ComingSoonModernComponent implements OnInit -{ - @ViewChild('comingSoonNgForm') comingSoonNgForm: NgForm; - - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - comingSoonForm: FormGroup; - showAlert: boolean = false; - - /** - * Constructor - */ - constructor( - private _authService: AuthService, - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.comingSoonForm = this._formBuilder.group({ - email: ['', [Validators.required, Validators.email]] - }); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Sign in - */ - register(): void - { - // Return if the form is invalid - if ( this.comingSoonForm.invalid ) - { - return; - } - - // Disable the form - this.comingSoonForm.disable(); - - // Hide the alert - this.showAlert = false; - - // Do your action here... - // Emulate server delay - setTimeout(() => { - - // Re-enable the form - this.comingSoonForm.enable(); - - // Reset the form - this.comingSoonNgForm.resetForm(); - - // Set the alert - this.alert = { - type : 'success', - message: 'You have been registered to the list.' - }; - - }, 1000); - } -} diff --git a/src/app/modules/admin/pages/coming-soon/split-screen-reversed/coming-soon.component.html b/src/app/modules/admin/pages/coming-soon/split-screen-reversed/coming-soon.component.html deleted file mode 100644 index 2569d98d..00000000 --- a/src/app/modules/admin/pages/coming-soon/split-screen-reversed/coming-soon.component.html +++ /dev/null @@ -1,123 +0,0 @@ -
- -
-
- -
- -
- - -
Almost there!
-
- Do you want to be notified when we are ready? Register below so we can notify you about the launch! -
- - - - {{alert.message}} - - - -
- - - - Email address - - - Email address is required - - - Please enter a valid email address - - - - - - - -
- This isn't a newsletter subscription. We will send one email to you when - we launch and then you will be removed from the list. -
- -
-
-
-
diff --git a/src/app/modules/admin/pages/coming-soon/split-screen-reversed/coming-soon.component.ts b/src/app/modules/admin/pages/coming-soon/split-screen-reversed/coming-soon.component.ts deleted file mode 100644 index 00d519fd..00000000 --- a/src/app/modules/admin/pages/coming-soon/split-screen-reversed/coming-soon.component.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, NgForm, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; -import { AuthService } from 'app/core/auth/auth.service'; - -@Component({ - selector : 'coming-soon-classic', - templateUrl : './coming-soon.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class ComingSoonSplitScreenReversedComponent implements OnInit -{ - @ViewChild('comingSoonNgForm') comingSoonNgForm: NgForm; - - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - comingSoonForm: FormGroup; - showAlert: boolean = false; - - /** - * Constructor - */ - constructor( - private _authService: AuthService, - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.comingSoonForm = this._formBuilder.group({ - email: ['', [Validators.required, Validators.email]] - }); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Sign in - */ - register(): void - { - // Return if the form is invalid - if ( this.comingSoonForm.invalid ) - { - return; - } - - // Disable the form - this.comingSoonForm.disable(); - - // Hide the alert - this.showAlert = false; - - // Do your action here... - // Emulate server delay - setTimeout(() => { - - // Re-enable the form - this.comingSoonForm.enable(); - - // Reset the form - this.comingSoonNgForm.resetForm(); - - // Set the alert - this.alert = { - type : 'success', - message: 'You have been registered to the list.' - }; - - }, 1000); - } -} diff --git a/src/app/modules/admin/pages/coming-soon/split-screen/coming-soon.component.html b/src/app/modules/admin/pages/coming-soon/split-screen/coming-soon.component.html deleted file mode 100644 index d37d3261..00000000 --- a/src/app/modules/admin/pages/coming-soon/split-screen/coming-soon.component.html +++ /dev/null @@ -1,123 +0,0 @@ -
-
-
- -
- -
- - -
Almost there!
-
- Do you want to be notified when we are ready? Register below so we can notify you about the launch! -
- - - - {{alert.message}} - - - -
- - - - Email address - - - Email address is required - - - Please enter a valid email address - - - - - - - -
- This isn't a newsletter subscription. We will send one email to you when - we launch and then you will be removed from the list. -
- -
-
-
- -
diff --git a/src/app/modules/admin/pages/coming-soon/split-screen/coming-soon.component.ts b/src/app/modules/admin/pages/coming-soon/split-screen/coming-soon.component.ts deleted file mode 100644 index f41c343d..00000000 --- a/src/app/modules/admin/pages/coming-soon/split-screen/coming-soon.component.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, NgForm, Validators } from '@angular/forms'; -import { FuseAnimations } from '@fuse/animations'; -import { FuseAlertType } from '@fuse/components/alert'; -import { AuthService } from 'app/core/auth/auth.service'; - -@Component({ - selector : 'coming-soon-classic', - templateUrl : './coming-soon.component.html', - encapsulation: ViewEncapsulation.None, - animations : FuseAnimations -}) -export class ComingSoonSplitScreenComponent implements OnInit -{ - @ViewChild('comingSoonNgForm') comingSoonNgForm: NgForm; - - alert: { type: FuseAlertType, message: string } = { - type : 'success', - message: '' - }; - comingSoonForm: FormGroup; - showAlert: boolean = false; - - /** - * Constructor - */ - constructor( - private _authService: AuthService, - private _formBuilder: FormBuilder - ) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Create the form - this.comingSoonForm = this._formBuilder.group({ - email: ['', [Validators.required, Validators.email]] - }); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Sign in - */ - register(): void - { - // Return if the form is invalid - if ( this.comingSoonForm.invalid ) - { - return; - } - - // Disable the form - this.comingSoonForm.disable(); - - // Hide the alert - this.showAlert = false; - - // Do your action here... - // Emulate server delay - setTimeout(() => { - - // Re-enable the form - this.comingSoonForm.enable(); - - // Reset the form - this.comingSoonNgForm.resetForm(); - - // Set the alert - this.alert = { - type : 'success', - message: 'You have been registered to the list.' - }; - - }, 1000); - } -} diff --git a/src/app/modules/admin/pages/error/error-404/error-404.component.html b/src/app/modules/admin/pages/error/error-404/error-404.component.html deleted file mode 100644 index 2ae98955..00000000 --- a/src/app/modules/admin/pages/error/error-404/error-404.component.html +++ /dev/null @@ -1,64 +0,0 @@ -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
Ooops... 404!
-
The page you requested could not be found.
- - Back to Dashboard - -
-
diff --git a/src/app/modules/admin/pages/error/error-404/error-404.component.ts b/src/app/modules/admin/pages/error/error-404/error-404.component.ts deleted file mode 100644 index 707e4813..00000000 --- a/src/app/modules/admin/pages/error/error-404/error-404.component.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core'; - -@Component({ - selector : 'error-404', - templateUrl : './error-404.component.html', - encapsulation : ViewEncapsulation.None, - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class Error404Component -{ - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/pages/error/error-404/error-404.module.ts b/src/app/modules/admin/pages/error/error-404/error-404.module.ts deleted file mode 100644 index 8a84bc56..00000000 --- a/src/app/modules/admin/pages/error/error-404/error-404.module.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { Error404Component } from 'app/modules/admin/pages/error/error-404/error-404.component'; -import { error404Routes } from 'app/modules/admin/pages/error/error-404/error-404.routing'; - -@NgModule({ - declarations: [ - Error404Component - ], - imports : [ - RouterModule.forChild(error404Routes) - ] -}) -export class Error404Module -{ -} diff --git a/src/app/modules/admin/pages/error/error-404/error-404.routing.ts b/src/app/modules/admin/pages/error/error-404/error-404.routing.ts deleted file mode 100644 index 19c2b07f..00000000 --- a/src/app/modules/admin/pages/error/error-404/error-404.routing.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Route } from '@angular/router'; -import { Error404Component } from 'app/modules/admin/pages/error/error-404/error-404.component'; - -export const error404Routes: Route[] = [ - { - path : '', - component: Error404Component - } -]; diff --git a/src/app/modules/admin/pages/error/error-500/error-500.component.html b/src/app/modules/admin/pages/error/error-500/error-500.component.html deleted file mode 100644 index e8d55838..00000000 --- a/src/app/modules/admin/pages/error/error-500/error-500.component.html +++ /dev/null @@ -1,73 +0,0 @@ -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
Something went wrong!
-
Server Error 500. Our staff has been notified, thank you for your understanding.
- - Back to Dashboard - -
-
diff --git a/src/app/modules/admin/pages/error/error-500/error-500.component.ts b/src/app/modules/admin/pages/error/error-500/error-500.component.ts deleted file mode 100644 index fa8ac9d4..00000000 --- a/src/app/modules/admin/pages/error/error-500/error-500.component.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core'; - -@Component({ - selector : 'error-500', - templateUrl : './error-500.component.html', - encapsulation : ViewEncapsulation.None, - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class Error500Component -{ - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/pages/error/error-500/error-500.module.ts b/src/app/modules/admin/pages/error/error-500/error-500.module.ts deleted file mode 100644 index 48f311ac..00000000 --- a/src/app/modules/admin/pages/error/error-500/error-500.module.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { Error500Component } from 'app/modules/admin/pages/error/error-500/error-500.component'; -import { error500Routes } from 'app/modules/admin/pages/error/error-500/error-500.routing'; - -@NgModule({ - declarations: [ - Error500Component - ], - imports : [ - RouterModule.forChild(error500Routes) - ] -}) -export class Error500Module -{ -} diff --git a/src/app/modules/admin/pages/error/error-500/error-500.routing.ts b/src/app/modules/admin/pages/error/error-500/error-500.routing.ts deleted file mode 100644 index c12722b2..00000000 --- a/src/app/modules/admin/pages/error/error-500/error-500.routing.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Route } from '@angular/router'; -import { Error500Component } from 'app/modules/admin/pages/error/error-500/error-500.component'; - -export const error500Routes: Route[] = [ - { - path : '', - component: Error500Component - } -]; diff --git a/src/app/modules/admin/pages/invoice/printable/compact/compact.component.html b/src/app/modules/admin/pages/invoice/printable/compact/compact.component.html deleted file mode 100644 index 2f711ac2..00000000 --- a/src/app/modules/admin/pages/invoice/printable/compact/compact.component.html +++ /dev/null @@ -1,163 +0,0 @@ -
- - -
- - -
- -
-
-
INVOICE
-
#9-0004
-
INVOICE DATE
-
Jul 19, 2022
-
DUE DATE
-
Aug 19, 2022
-
TOTAL DUE
-
$235,000.00
-
-
-
- -
-
-
Fuse Inc.
-
2810 Country Club Road
-
Cranford, NJ 07016
-
+66 123 455 87
-
hello@fuseinc.com
-
www.fuseinc.com
-
-
-
- -
-
Brian Hughes
-
9301 Wood Street Philadelphia, PA 19111
-
hughes.brian@company.com
-
+55 552 455 87
-
- -
- -
SERVICE
-
RATE
-
QTY
-
TOTAL
- - -
- - -
Prototype & Design
-
$75.00
-
240
-
$18,000.00
- - -
- - -
Development
-
$60.50
-
350
-
$21,175.00
- - -
- - -
Testing
-
$25.00
-
50
-
$1,250.00
- - -
- - -
Documentation & Training
-
$26.50
-
260
-
$6,890.00
- - -
- - -
Critical bug fixes for a year
-
$25,000
-
2
-
$50,000.00
- - -
- - -
Extended security updates for a year
-
$15.000
-
2
-
$30,000.00
- - -
- - -
Extended updates for a year
-
$50.000
-
2
-
$100,000.00
- - -
- - -
SUBTOTAL
-
$227,315.00
- - -
- - -
TAX
-
$11,365.75
- - -
- - -
DISCOUNT
-
$3,680.75
- - -
- - -
TOTAL
-
$235,000.00
-
- -
-
Please pay within 15 days. Thank you for your business.
-
- -
- In condimentum malesuada efficitur. Mauris volutpat placerat auctor. Ut ac congue dolor. Quisque scelerisque lacus sed feugiat fermentum. - Cras aliquet facilisis pellentesque. Nunc hendrerit quam at leo commodo, a suscipit tellus dapibus. Etiam at felis volutpat est mollis lacinia. - Mauris placerat sem sit amet velit mollis, in porttitor ex finibus. Proin eu nibh id libero tincidunt lacinia et eget. -
-
-
- -
- -
- -
diff --git a/src/app/modules/admin/pages/invoice/printable/compact/compact.component.ts b/src/app/modules/admin/pages/invoice/printable/compact/compact.component.ts deleted file mode 100644 index fc1414a7..00000000 --- a/src/app/modules/admin/pages/invoice/printable/compact/compact.component.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core'; - -@Component({ - selector : 'compact', - templateUrl : './compact.component.html', - encapsulation : ViewEncapsulation.None, - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class CompactComponent -{ - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/pages/invoice/printable/compact/compact.module.ts b/src/app/modules/admin/pages/invoice/printable/compact/compact.module.ts deleted file mode 100644 index b406407d..00000000 --- a/src/app/modules/admin/pages/invoice/printable/compact/compact.module.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { CdkScrollableModule } from '@angular/cdk/scrolling'; -import { CompactComponent } from 'app/modules/admin/pages/invoice/printable/compact/compact.component'; -import { compactRoutes } from 'app/modules/admin/pages/invoice/printable/compact/compact.routing'; - -@NgModule({ - declarations: [ - CompactComponent - ], - imports : [ - RouterModule.forChild(compactRoutes), - CdkScrollableModule - ] -}) -export class CompactModule -{ -} diff --git a/src/app/modules/admin/pages/invoice/printable/compact/compact.routing.ts b/src/app/modules/admin/pages/invoice/printable/compact/compact.routing.ts deleted file mode 100644 index 39a806db..00000000 --- a/src/app/modules/admin/pages/invoice/printable/compact/compact.routing.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Route } from '@angular/router'; -import { CompactComponent } from 'app/modules/admin/pages/invoice/printable/compact/compact.component'; - -export const compactRoutes: Route[] = [ - { - path : '', - component: CompactComponent - } -]; diff --git a/src/app/modules/admin/pages/invoice/printable/modern/modern.component.html b/src/app/modules/admin/pages/invoice/printable/modern/modern.component.html deleted file mode 100644 index d18f6ad6..00000000 --- a/src/app/modules/admin/pages/invoice/printable/modern/modern.component.html +++ /dev/null @@ -1,163 +0,0 @@ -
- - -
- - -
- -
-
-
-
- -
-
-
Fuse Inc.
-
2810 Country Club Road
-
Cranford, NJ 07016
-
+66 123 455 87
-
hello@fuseinc.com
-
www.fuseinc.com
-
-
-
-
- Bill To -
-
-
Brian Hughes
-
9301 Wood Street
-
Philadelphia, PA 19111
-
+55 552 455 87
-
hughes.brian@company.com
-
-
-
-
-
INVOICE
-
#9-0004
-
INVOICE DATE
-
Jul 19, 2022
-
DUE DATE
-
Aug 19, 2022
-
TOTAL DUE
-
$49,000.00
-
-
- -
- -
SERVICE
-
RATE
-
QTY
-
TOTAL
- - -
- - -
-
Prototype & Design
-
- Prototyping of the application's general workflow and the detailed design of its 72 screens as a working prototype. -
-
-
$75.00
-
240
-
$18,000.00
- - -
- - -
-
Development
-
- The web and mobile development of the application using appropriate tools and registering it to major application stores. -
-
-
$60.50
-
350
-
$21,175.00
- - -
- - -
-
Testing
-
- Extensive testing of the application using various mobile and desktop devices with different operating systems. -
-
-
$25.00
-
50
-
$1,250.00
- - -
- - -
-
Documentation & Training
-
- Development of the detailed documentation, preparing guides and instructional videos and extensive training of 2 people. -
-
-
$26.50
-
260
-
$6,890.00
- - -
- - -
SUBTOTAL
-
$47,315.00
- - -
- - -
TAX
-
$2,365.75
- - -
- - -
DISCOUNT
-
$180.75
- - -
- - -
TOTAL
-
$49,000.00
-
- -
-
Please pay within 15 days. Thank you for your business.
-
- -
- In condimentum malesuada efficitur. Mauris volutpat placerat auctor. Ut ac congue dolor. Quisque scelerisque lacus sed feugiat fermentum. - Cras aliquet facilisis pellentesque. Nunc hendrerit quam at leo commodo, a suscipit tellus dapibus. Etiam at felis volutpat est mollis lacinia. - Mauris placerat sem sit amet velit mollis, in porttitor ex finibus. Proin eu nibh id libero tincidunt lacinia et eget. -
-
-
- -
- -
- -
diff --git a/src/app/modules/admin/pages/invoice/printable/modern/modern.component.ts b/src/app/modules/admin/pages/invoice/printable/modern/modern.component.ts deleted file mode 100644 index 224b5611..00000000 --- a/src/app/modules/admin/pages/invoice/printable/modern/modern.component.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core'; - -@Component({ - selector : 'modern', - templateUrl : './modern.component.html', - encapsulation : ViewEncapsulation.None, - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class ModernComponent -{ - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/pages/invoice/printable/modern/modern.module.ts b/src/app/modules/admin/pages/invoice/printable/modern/modern.module.ts deleted file mode 100644 index 4fc62cc9..00000000 --- a/src/app/modules/admin/pages/invoice/printable/modern/modern.module.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { ModernComponent } from 'app/modules/admin/pages/invoice/printable/modern/modern.component'; -import { modernRoutes } from 'app/modules/admin/pages/invoice/printable/modern/modern.routing'; - -@NgModule({ - declarations: [ - ModernComponent - ], - imports : [ - RouterModule.forChild(modernRoutes) - ] -}) -export class ModernModule -{ -} diff --git a/src/app/modules/admin/pages/invoice/printable/modern/modern.routing.ts b/src/app/modules/admin/pages/invoice/printable/modern/modern.routing.ts deleted file mode 100644 index 81361284..00000000 --- a/src/app/modules/admin/pages/invoice/printable/modern/modern.routing.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Route } from '@angular/router'; -import { ModernComponent } from 'app/modules/admin/pages/invoice/printable/modern/modern.component'; - -export const modernRoutes: Route[] = [ - { - path : '', - component: ModernComponent - } -]; diff --git a/src/app/modules/admin/pages/maintenance/maintenance.component.html b/src/app/modules/admin/pages/maintenance/maintenance.component.html deleted file mode 100644 index 3e004c32..00000000 --- a/src/app/modules/admin/pages/maintenance/maintenance.component.html +++ /dev/null @@ -1,49 +0,0 @@ -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
We are under scheduled maintenance.
-
Sorry for the inconvenience, we will be back shortly!
-
-
diff --git a/src/app/modules/admin/pages/maintenance/maintenance.component.ts b/src/app/modules/admin/pages/maintenance/maintenance.component.ts deleted file mode 100644 index ac03862b..00000000 --- a/src/app/modules/admin/pages/maintenance/maintenance.component.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core'; - -@Component({ - selector : 'maintenance', - templateUrl : './maintenance.component.html', - encapsulation : ViewEncapsulation.None, - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class MaintenanceComponent -{ - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/pages/maintenance/maintenance.module.ts b/src/app/modules/admin/pages/maintenance/maintenance.module.ts deleted file mode 100644 index 41e9035d..00000000 --- a/src/app/modules/admin/pages/maintenance/maintenance.module.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { MaintenanceComponent } from 'app/modules/admin/pages/maintenance/maintenance.component'; -import { maintenanceRoutes } from 'app/modules/admin/pages/maintenance/maintenance.routing'; - -@NgModule({ - declarations: [ - MaintenanceComponent - ], - imports : [ - RouterModule.forChild(maintenanceRoutes) - ] -}) -export class MaintenanceModule -{ -} diff --git a/src/app/modules/admin/pages/maintenance/maintenance.routing.ts b/src/app/modules/admin/pages/maintenance/maintenance.routing.ts deleted file mode 100644 index 694b7a8a..00000000 --- a/src/app/modules/admin/pages/maintenance/maintenance.routing.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Route } from '@angular/router'; -import { MaintenanceComponent } from 'app/modules/admin/pages/maintenance/maintenance.component'; - -export const maintenanceRoutes: Route[] = [ - { - path : '', - component: MaintenanceComponent - } -]; diff --git a/src/app/modules/admin/pages/pricing/modern/modern.component.html b/src/app/modules/admin/pages/pricing/modern/modern.component.html deleted file mode 100644 index 0e6073b3..00000000 --- a/src/app/modules/admin/pages/pricing/modern/modern.component.html +++ /dev/null @@ -1,435 +0,0 @@ -
- - -
- - - - - - - - - -
-

PRICING

-
- Take control of your productivity -
-
-
Start small and free, upgrade as you go.
-
Take control of everything.
-
- -
- - -
-
- -
-
-
- - -
Personal
-
Perfect for an individual or a small team starting to get bigger
-
- -
-
USD
-
- $6.00 - $9.00 -
-
- -
- -
billed yearly
-
$9.00 billed monthly
-
- -
billed monthly
-
$6.00 billed yearly
-
-
- - - -
-
Core features, including:
-
-
- -
10 projects
-
-
- -
5GB storage
-
-
- -
Analytics
-
-
- -
Free mobile app
-
-
- -
Access to forums
-
-
-
-
- - -
-
POPULAR
-
-
Premium
-
Perfect for growing teams wanting to be in more control
-
- -
-
USD
-
- $12.00 - $15.00 -
-
- -
- -
billed yearly
-
$15.00 billed monthly
-
- -
billed monthly
-
$12.00 billed yearly
-
-
- - - -
-
Personal features, plus:
-
-
- -
Unlimited projects
-
-
- -
Unlimited storage
-
-
- -
Custom domains
-
-
- -
Bulk editing
-
-
- -
12 / 5 support
-
-
-
-
- - -
Enterprise
-
Perfect for companies wanting advanced tools and support
-
- -
-
USD
-
- $49.00 - $69.00 -
-
- -
- -
billed yearly
-
$69.00 billed monthly
-
- -
billed monthly
-
$49.00 billed yearly
-
-
- - - -
-
Premium features, plus:
-
-
- -
Dedicated hardware
-
-
- -
%99.9 uptime
-
-
- -
Advanced analytics
-
-
- -
3rd party integrations
-
-
- -
24 / 7 support
-
-
-
-
-
-
-
-
- - -
-
-
-
- Everything you need to build efficiently -
-
- Start building your app using our tools, be efficient, spend less time with details more time with your business -
-
- -
-
- - - -
Create and Edit Projects
-
- Create and edit projects, upload images via drag drop, add categories, add custom fields, create interactive forms and more. -
-
-
- - - -
Search and Filter
-
- Search and filter within the projects, categories and custom fields. Save search and filter details for easy access. -
-
-
- - - -
Real Time Updates
-
- Real time updates that doesn't require page reload. Lean back and watch the changes happen in real time. -
-
-
- - - -
Meta Information
-
- Add and remove meta information to custom fields to differentiate them in reports and analytics results, use them for detailed reports. -
-
-
- - - -
Pre-rendered Results
-
- Pre-render results to make reports and analytics more accessible by screen readers and other accessibility tools. -
-
-
- - - -
Simple Analytics
-
- Simple analytics with no unnecessary data flow or weight. More readable results with less data consumption. -
-
-
-
-
- - -
-
-
Boost your productivity.
-
Start using Fuse today.
- -
-
- - -
-
-
-
- Frequently asked questions -
-
- Here are the most frequently asked questions you may check before getting started -
-
- -
-
-
- What is the duration of the free trial? -
-
-

- Our app is free to try for 14 days, if you want more, you can provide - payment details which will extend your trial to 30 days providing you - an extra 16 more days to try our app. -

-
-
-
-
- Are there discounts for non-profits or educational use? -
-
-

- Yes, our Personal and Premium packages are free for non-profits and - educational use. E-mail your details to us after starting your Free - Trial and we will upgrade your account if you qualify. -

-
-
-
-
- What is the storage is for? -
-
-

- Since we provide an extremely detailed reporting and analytics - tool, they require quite a bit storage space. For average use, you - don’t have to worry about running out of space since the - Personal package limits the projects you can have. -

-

- For some reason if you run out of space, contact us and we will - see what can be done about it and make sure you are not - generating unnecessary reports and/or analytics data. -

-
-
-
-
- What happens if I’m not satisfied? -
-
-

- If you are still in your free trial period, you can cancel your - account at anytime with a single click of a button. If you already - paid for your first month, we also offer 30-day money-back - guarantee with no questions asked. -

-

- After first month, you can still cancel your account at any time - but we will calculate the amount that corresponds to days you - have been using our app for that month and refund only the - remaining amount. -

-
-
-
-
-
-
diff --git a/src/app/modules/admin/pages/pricing/modern/modern.component.ts b/src/app/modules/admin/pages/pricing/modern/modern.component.ts deleted file mode 100644 index 8cae1bd9..00000000 --- a/src/app/modules/admin/pages/pricing/modern/modern.component.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core'; - -@Component({ - selector : 'pricing-modern', - templateUrl : './modern.component.html', - encapsulation : ViewEncapsulation.None, - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class PricingModernComponent -{ - yearlyBilling: boolean = true; - - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/pages/pricing/modern/modern.module.ts b/src/app/modules/admin/pages/pricing/modern/modern.module.ts deleted file mode 100644 index 0a8fe93a..00000000 --- a/src/app/modules/admin/pages/pricing/modern/modern.module.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { MatButtonModule } from '@angular/material/button'; -import { MatIconModule } from '@angular/material/icon'; -import { FuseCardModule } from '@fuse/components/card'; -import { SharedModule } from 'app/shared/shared.module'; -import { PricingModernComponent } from 'app/modules/admin/pages/pricing/modern/modern.component'; -import { pricingModernRoutes } from 'app/modules/admin/pages/pricing/modern/modern.routing'; - -@NgModule({ - declarations: [ - PricingModernComponent - ], - imports : [ - RouterModule.forChild(pricingModernRoutes), - MatButtonModule, - MatIconModule, - FuseCardModule, - SharedModule - ] -}) -export class PricingModernModule -{ -} diff --git a/src/app/modules/admin/pages/pricing/modern/modern.routing.ts b/src/app/modules/admin/pages/pricing/modern/modern.routing.ts deleted file mode 100644 index 8fb9c323..00000000 --- a/src/app/modules/admin/pages/pricing/modern/modern.routing.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Route } from '@angular/router'; -import { PricingModernComponent } from 'app/modules/admin/pages/pricing/modern/modern.component'; - -export const pricingModernRoutes: Route[] = [ - { - path : '', - component: PricingModernComponent - } -]; diff --git a/src/app/modules/admin/pages/pricing/simple/simple.component.html b/src/app/modules/admin/pages/pricing/simple/simple.component.html deleted file mode 100644 index 0143a490..00000000 --- a/src/app/modules/admin/pages/pricing/simple/simple.component.html +++ /dev/null @@ -1,344 +0,0 @@ -
- - -
- - - - - - - - - -
-

PRICING

-
- Take control of your productivity -
-
-
Start small and free, upgrade as you go.
-
Take control of everything.
-
- -
- - -
-
- -
-
-
- - -
Personal
- -
-
- $6 - $9 -
-
/ month
-
- -
- -
billed yearly
-
$9.00 billed monthly
-
- -
billed monthly
-
$6.00 billed yearly
-
-
- -
-
10 projects
-
5GB storage
-
Analytics
-
Free mobile app
-
Access to forums
-
- - -
- - -
POPULAR
-
Premium
- -
-
- $12 - $15 -
-
/ month
-
- -
- -
billed yearly
-
$15.00 billed monthly
-
- -
billed monthly
-
$12.00 billed yearly
-
-
- -
-
Unlimited projects
-
Unlimited storage
-
Custom domains
-
Bulk editing
-
12 / 5 support
-
- - -
- - -
Enterprise
- -
-
- $49 - $69 -
-
/ month
-
- -
- -
billed yearly
-
$69.00 billed monthly
-
- -
billed monthly
-
$49.00 billed yearly
-
-
- -
-
Dedicated hardware
-
%99.9 uptime
-
Advanced analytics
-
3rd party integrations
-
24 / 7 support
-
- - -
-
-
-
-
- - -
-
-
-
- Everything you need to build efficiently -
-
- Start building your app using our tools, be efficient, spend less time with details more time with your business -
-
- -
-
- - - -
Create and Edit Projects
-
- Create and edit projects, upload images via drag drop, add categories, add custom fields, create interactive forms and more. -
-
-
- - - -
Search and Filter
-
- Search and filter within the projects, categories and custom fields. Save search and filter details for easy access. -
-
-
- - - -
Real Time Updates
-
- Real time updates that doesn't require page reload. Lean back and watch the changes happen in real time. -
-
-
- - - -
Meta Information
-
- Add and remove meta information to custom fields to differentiate them in reports and analytics results, use them for detailed reports. -
-
-
- - - -
Pre-rendered Results
-
- Pre-render results to make reports and analytics more accessible by screen readers and other accessibility tools. -
-
-
- - - -
Simple Analytics
-
- Simple analytics with no unnecessary data flow or weight. More readable results with less data consumption. -
-
-
-
-
- - -
-
-
Boost your productivity.
-
Start using Fuse today.
- -
-
- - -
-
-
-
- Frequently asked questions -
-
- Here are the most frequently asked questions you may check before getting started -
-
- -
-
-
- What is the duration of the free trial? -
-
-

- Our app is free to try for 14 days, if you want more, you can provide - payment details which will extend your trial to 30 days providing you - an extra 16 more days to try our app. -

-
-
-
-
- Are there discounts for non-profits or educational use? -
-
-

- Yes, our Personal and Premium packages are free for non-profits and - educational use. E-mail your details to us after starting your Free - Trial and we will upgrade your account if you qualify. -

-
-
-
-
- What is the storage is for? -
-
-

- Since we provide an extremely detailed reporting and analytics - tool, they require quite a bit storage space. For average use, you - don’t have to worry about running out of space since the - Personal package limits the projects you can have. -

-

- For some reason if you run out of space, contact us and we will - see what can be done about it and make sure you are not - generating unnecessary reports and/or analytics data. -

-
-
-
-
- What happens if I’m not satisfied? -
-
-

- If you are still in your free trial period, you can cancel your - account at anytime with a single click of a button. If you already - paid for your first month, we also offer 30-day money-back - guarantee with no questions asked. -

-

- After first month, you can still cancel your account at any time - but we will calculate the amount that corresponds to days you - have been using our app for that month and refund only the - remaining amount. -

-
-
-
-
-
- -
diff --git a/src/app/modules/admin/pages/pricing/simple/simple.component.ts b/src/app/modules/admin/pages/pricing/simple/simple.component.ts deleted file mode 100644 index adf597c4..00000000 --- a/src/app/modules/admin/pages/pricing/simple/simple.component.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core'; - -@Component({ - selector : 'pricing-simple', - templateUrl : './simple.component.html', - encapsulation : ViewEncapsulation.None, - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class PricingSimpleComponent -{ - yearlyBilling: boolean = true; - - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/pages/pricing/simple/simple.module.ts b/src/app/modules/admin/pages/pricing/simple/simple.module.ts deleted file mode 100644 index 09759045..00000000 --- a/src/app/modules/admin/pages/pricing/simple/simple.module.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { MatButtonModule } from '@angular/material/button'; -import { MatIconModule } from '@angular/material/icon'; -import { FuseCardModule } from '@fuse/components/card'; -import { SharedModule } from 'app/shared/shared.module'; -import { PricingSimpleComponent } from 'app/modules/admin/pages/pricing/simple/simple.component'; -import { pricingSimpleRoutes } from 'app/modules/admin/pages/pricing/simple/simple.routing'; - -@NgModule({ - declarations: [ - PricingSimpleComponent - ], - imports : [ - RouterModule.forChild(pricingSimpleRoutes), - MatButtonModule, - MatIconModule, - FuseCardModule, - SharedModule - ] -}) -export class PricingSimpleModule -{ -} diff --git a/src/app/modules/admin/pages/pricing/simple/simple.routing.ts b/src/app/modules/admin/pages/pricing/simple/simple.routing.ts deleted file mode 100644 index eb1c8e94..00000000 --- a/src/app/modules/admin/pages/pricing/simple/simple.routing.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Route } from '@angular/router'; -import { PricingSimpleComponent } from 'app/modules/admin/pages/pricing/simple/simple.component'; - -export const pricingSimpleRoutes: Route[] = [ - { - path : '', - component: PricingSimpleComponent - } -]; diff --git a/src/app/modules/admin/pages/pricing/single/single.component.html b/src/app/modules/admin/pages/pricing/single/single.component.html deleted file mode 100644 index 5ec435ed..00000000 --- a/src/app/modules/admin/pages/pricing/single/single.component.html +++ /dev/null @@ -1,260 +0,0 @@ -
- - -
- - - - - - - - - -
-

PRICING

-
- Take control of your productivity -
-
-
Start small and free, upgrade as you go.
-
Take control of everything.
-
-
- -
- -
-
Lifetime Membership
-
- Learn from like-minded individuals which are eager to make a living building stuff on the web. Pay once and get lifetime access to the community. -
-
-
INCLUDED FEATURES
-
-
- -
-
- -
Private forum access
-
-
- -
Access to annual online conference
-
-
- -
Member resources
-
-
- -
Official member T-Shirt
-
-
-
- -
-
-
$599
-
USD
-
-
-
No monthly subscription,
-
you only pay once.
-
- -
-
-
-
- - -
-
-
-
- Everything you need to build efficiently -
-
- Start building your app using our tools, be efficient, spend less time with details more time with your business -
-
- -
-
- - - -
Create and Edit Projects
-
- Create and edit projects, upload images via drag drop, add categories, add custom fields, create interactive forms and more. -
-
-
- - - -
Search and Filter
-
- Search and filter within the projects, categories and custom fields. Save search and filter details for easy access. -
-
-
- - - -
Real Time Updates
-
- Real time updates that doesn't require page reload. Lean back and watch the changes happen in real time. -
-
-
- - - -
Meta Information
-
- Add and remove meta information to custom fields to differentiate them in reports and analytics results, use them for detailed reports. -
-
-
- - - -
Pre-rendered Results
-
- Pre-render results to make reports and analytics more accessible by screen readers and other accessibility tools. -
-
-
- - - -
Simple Analytics
-
- Simple analytics with no unnecessary data flow or weight. More readable results with less data consumption. -
-
-
-
-
- - -
-
-
Boost your productivity.
-
Start using Fuse today.
- -
-
- - -
-
-
-
- Frequently asked questions -
-
- Here are the most frequently asked questions you may check before getting started -
-
- -
-
-
- What is the duration of the free trial? -
-
-

- Our app is free to try for 14 days, if you want more, you can provide - payment details which will extend your trial to 30 days providing you - an extra 16 more days to try our app. -

-
-
-
-
- Are there discounts for non-profits or educational use? -
-
-

- Yes, our Personal and Premium packages are free for non-profits and - educational use. E-mail your details to us after starting your Free - Trial and we will upgrade your account if you qualify. -

-
-
-
-
- What is the storage is for? -
-
-

- Since we provide an extremely detailed reporting and analytics - tool, they require quite a bit storage space. For average use, you - don’t have to worry about running out of space since the - Personal package limits the projects you can have. -

-

- For some reason if you run out of space, contact us and we will - see what can be done about it and make sure you are not - generating unnecessary reports and/or analytics data. -

-
-
-
-
- What happens if I’m not satisfied? -
-
-

- If you are still in your free trial period, you can cancel your - account at anytime with a single click of a button. If you already - paid for your first month, we also offer 30-day money-back - guarantee with no questions asked. -

-

- After first month, you can still cancel your account at any time - but we will calculate the amount that corresponds to days you - have been using our app for that month and refund only the - remaining amount. -

-
-
-
-
-
- -
diff --git a/src/app/modules/admin/pages/pricing/single/single.component.ts b/src/app/modules/admin/pages/pricing/single/single.component.ts deleted file mode 100644 index dc9d567b..00000000 --- a/src/app/modules/admin/pages/pricing/single/single.component.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core'; - -@Component({ - selector : 'pricing-single', - templateUrl : './single.component.html', - encapsulation : ViewEncapsulation.None, - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class PricingSingleComponent -{ - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/pages/pricing/single/single.module.ts b/src/app/modules/admin/pages/pricing/single/single.module.ts deleted file mode 100644 index d4fe4273..00000000 --- a/src/app/modules/admin/pages/pricing/single/single.module.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { MatButtonModule } from '@angular/material/button'; -import { MatIconModule } from '@angular/material/icon'; -import { FuseCardModule } from '@fuse/components/card'; -import { SharedModule } from 'app/shared/shared.module'; -import { PricingSingleComponent } from 'app/modules/admin/pages/pricing/single/single.component'; -import { pricingSingleRoutes } from 'app/modules/admin/pages/pricing/single/single.routing'; - -@NgModule({ - declarations: [ - PricingSingleComponent - ], - imports : [ - RouterModule.forChild(pricingSingleRoutes), - MatButtonModule, - MatIconModule, - FuseCardModule, - SharedModule - ] -}) -export class PricingSingleModule -{ -} diff --git a/src/app/modules/admin/pages/pricing/single/single.routing.ts b/src/app/modules/admin/pages/pricing/single/single.routing.ts deleted file mode 100644 index 5a4a7864..00000000 --- a/src/app/modules/admin/pages/pricing/single/single.routing.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Route } from '@angular/router'; -import { PricingSingleComponent } from 'app/modules/admin/pages/pricing/single/single.component'; - -export const pricingSingleRoutes: Route[] = [ - { - path : '', - component: PricingSingleComponent - } -]; diff --git a/src/app/modules/admin/pages/pricing/table/table.component.html b/src/app/modules/admin/pages/pricing/table/table.component.html deleted file mode 100644 index b05b725e..00000000 --- a/src/app/modules/admin/pages/pricing/table/table.component.html +++ /dev/null @@ -1,476 +0,0 @@ -
- - -
- - - - - - - - - -
-

PRICING

-
- Take control of your productivity -
-
-
Start small and free, upgrade as you go.
-
Take control of everything.
-
- -
- - -
-
- -
- -
- -
-
-
-
-
Personal
-
- -
- $6 - $9 -
-
/ mo
-
-
- -
billed yearly
-
$9.00 billed monthly
-
- -
billed monthly
-
$6.00 billed yearly
-
-
- -
-
-
-
-
-
Premium
- -
-
- -
- $12 - $15 -
-
/ mo
-
-
- -
billed yearly
-
$15.00 billed monthly
-
- -
billed monthly
-
$12.00 billed yearly
-
-
- -
-
-
-
-
Enterprise
-
- -
- $49 - $69 -
-
/ mo
-
-
- -
billed yearly
-
$69.00 billed monthly
-
- -
billed monthly
-
$49.00 billed yearly
-
-
- -
-
-
- - - - -
-
Unlimited projects
- -
- -
- -
- -
- -
- -
-
- -
-
Unlimited storage
- -
- -
- -
- -
- -
- -
-
- -
-
Custom domain support
- -
- -
- -
- -
- -
- -
-
- -
-
Dedicated hardware
- -
- -
- -
- -
- -
- -
-
- - - - -
-
Fraud analysis
- -
- -
- -
- -
- -
- -
-
- -
-
Rates for in-house payment systems
- -
2.9% + 30¢
- -
2.6% + 30¢
- -
2.4% + 30¢
-
- -
-
Rates for other payment systems
- -
4.9% + 30¢
- -
4.6% + 30¢
- -
4.4% + 30¢
-
- -
-
Additional fees using other payment systems
- -
2%
- -
1%
- -
0.5%
-
-
-
-
-
- - -
-
-
-
- Everything you need to build efficiently -
-
- Start building your app using our tools, be efficient, spend less time with details more time with your business -
-
- -
-
- - - -
Create and Edit Projects
-
- Create and edit projects, upload images via drag drop, add categories, add custom fields, create interactive forms and more. -
-
-
- - - -
Search and Filter
-
- Search and filter within the projects, categories and custom fields. Save search and filter details for easy access. -
-
-
- - - -
Real Time Updates
-
- Real time updates that doesn't require page reload. Lean back and watch the changes happen in real time. -
-
-
- - - -
Meta Information
-
- Add and remove meta information to custom fields to differentiate them in reports and analytics results, use them for detailed reports. -
-
-
- - - -
Pre-rendered Results
-
- Pre-render results to make reports and analytics more accessible by screen readers and other accessibility tools. -
-
-
- - - -
Simple Analytics
-
- Simple analytics with no unnecessary data flow or weight. More readable results with less data consumption. -
-
-
-
-
- - -
-
-
Boost your productivity.
-
Start using Fuse today.
- -
-
- - -
-
-
-
- Frequently asked questions -
-
- Here are the most frequently asked questions you may check before getting started -
-
- -
-
-
- What is the duration of the free trial? -
-
-

- Our app is free to try for 14 days, if you want more, you can provide - payment details which will extend your trial to 30 days providing you - an extra 16 more days to try our app. -

-
-
-
-
- Are there discounts for non-profits or educational use? -
-
-

- Yes, our Personal and Premium packages are free for non-profits and - educational use. E-mail your details to us after starting your Free - Trial and we will upgrade your account if you qualify. -

-
-
-
-
- What is the storage is for? -
-
-

- Since we provide an extremely detailed reporting and analytics - tool, they require quite a bit storage space. For average use, you - don’t have to worry about running out of space since the - Personal package limits the projects you can have. -

-

- For some reason if you run out of space, contact us and we will - see what can be done about it and make sure you are not - generating unnecessary reports and/or analytics data. -

-
-
-
-
- What happens if I’m not satisfied? -
-
-

- If you are still in your free trial period, you can cancel your - account at anytime with a single click of a button. If you already - paid for your first month, we also offer 30-day money-back - guarantee with no questions asked. -

-

- After first month, you can still cancel your account at any time - but we will calculate the amount that corresponds to days you - have been using our app for that month and refund only the - remaining amount. -

-
-
-
-
-
- -
diff --git a/src/app/modules/admin/pages/pricing/table/table.component.ts b/src/app/modules/admin/pages/pricing/table/table.component.ts deleted file mode 100644 index 4ff88fa7..00000000 --- a/src/app/modules/admin/pages/pricing/table/table.component.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core'; - -@Component({ - selector : 'pricing-table', - templateUrl : './table.component.html', - encapsulation : ViewEncapsulation.None, - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class PricingTableComponent -{ - yearlyBilling: boolean = true; - - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/pages/pricing/table/table.module.ts b/src/app/modules/admin/pages/pricing/table/table.module.ts deleted file mode 100644 index fc21da6e..00000000 --- a/src/app/modules/admin/pages/pricing/table/table.module.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { MatButtonModule } from '@angular/material/button'; -import { MatIconModule } from '@angular/material/icon'; -import { FuseCardModule } from '@fuse/components/card'; -import { SharedModule } from 'app/shared/shared.module'; -import { PricingTableComponent } from 'app/modules/admin/pages/pricing/table/table.component'; -import { pricingTableRoutes } from 'app/modules/admin/pages/pricing/table/table.routing'; - -@NgModule({ - declarations: [ - PricingTableComponent - ], - imports : [ - RouterModule.forChild(pricingTableRoutes), - MatButtonModule, - MatIconModule, - FuseCardModule, - SharedModule - ] -}) -export class PricingTableModule -{ -} diff --git a/src/app/modules/admin/pages/pricing/table/table.routing.ts b/src/app/modules/admin/pages/pricing/table/table.routing.ts deleted file mode 100644 index cc727192..00000000 --- a/src/app/modules/admin/pages/pricing/table/table.routing.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Route } from '@angular/router'; -import { PricingTableComponent } from 'app/modules/admin/pages/pricing/table/table.component'; - -export const pricingTableRoutes: Route[] = [ - { - path : '', - component: PricingTableComponent - } -]; diff --git a/src/app/modules/admin/pages/profile/profile.component.html b/src/app/modules/admin/pages/profile/profile.component.html deleted file mode 100644 index bc5c1328..00000000 --- a/src/app/modules/admin/pages/profile/profile.component.html +++ /dev/null @@ -1,1836 +0,0 @@ -
- - -
- - -
- Cover image -
- - -
- - -
- User avatar -
- - -
-
Brian Hughes
-
London, UK
-
- - - - - -
-
- 200k - FOLLOWERS -
-
- 1.2k - FOLLOWING -
-
- - - - -
- -
- - -
- - - - - -
- - - -
Create Post
-
-
- Card cover image -
Brian Hughes
-
- - - -
-
- - - - - - - - - - - -
-
- - - -
- Card cover image -
- Caroline Lundu - 29 minutes ago -
- - - - - - - - - - -
-
- Look at that sky! I so want to be there.. Can we arrange a trip? Is that a possibility? Please!!! -
-
- Card cover image -
- -
-
-
- - - -
-
-
-
- Card cover image - Card cover image - Card cover image - Card cover image -
You and 24 more liked this
-
- -
- - -
-
- - -
-
-
- Card cover image - - - -
-
- - - -
-
-
-
-
-
- Card cover image -
- - Rutherford Brannan Oh, I’m in.. Let’s arrange a trip for the next weekend if you want! - -
- Like - - Reply - - Hide replies - - - 17 min -
-
-
-
- Card cover image -
- - Caroline Lundu Yes!! Let's talk about it on lunch! - -
- Like - - Reply - - - 15 min -
-
-
-
- Card cover image -
- - Barbara Cotilla Count me in !!! - -
- Like - - Reply - - - 12 min -
-
-
-
- Card cover image -
- - Alan Marti The color of the sky doesn’t look natural at all, do you really think this is natural? I’d say Photoshop! - Your trip isn't going to worth it since you won't be seeing this exact sky. - -
- Like - - Reply - - Hide replies - - - 24 min -
-
-
-
- Card cover image -
- - Caroline Lundu Hey, Alan! You must be fun at parties! - -
- Like - - Reply - - - 22 min -
-
-
-
- Card cover image -
- - Alan Marti Caroline, I'm telling the truth, and if you cannot stand the truth, maybe we shouldn't be friends anymore... - -
- Like - - Reply - - - 20 min -
-
-
-
- Card cover image -
- - Caroline Lundu Dude! Relax! I'm just messing with you... - -
- Like - - Reply - - - 18 min -
-
-
-
- Card cover image -
- - Alan Marti Sorry! I had a bad morning, let's talk about this in couple hours, I need to relax a bit :( - -
- Like - - Reply - - - 16 min -
-
-
-
- Card cover image -
- - Marleah Eagleston Count me in, too! - -
- Like - - Reply - - - 34 min -
-
-
-
-
-
-
- - - -
- Card cover image -
- Caroline Lundu - 29 minutes ago -
- - - - - - - - - - -
-
-

- We'll put a happy little sky in here. We touch the canvas, the canvas takes what it wants. A little happy sunlight shining through there. - Let's build some happy little clouds up here. I was blessed with a very steady hand; and it comes in very handy when you're doing these little delicate - things. This is the fun part. -

-

- Isn't it great to do something you can't fail at? Little trees and bushes grow however makes them happy. - Trees get lonely too, so we'll give him a little friend. There are no mistakes. You can fix anything that happens. -

-
-
- - - -
-
-
-
- Card cover image - Card cover image - Card cover image - Card cover image -
You and 24 more liked this
-
- -
- - -
-
-
- - - -
- Card cover image -
- Marleah Eagleston - 29 minutes ago -
- - - - - - - - - - -
-
- Look at that sky! I so want to be there.. Can we arrange a trip? Is that a possibility? Please!!! -
-
-
- Card cover image -
-
-
- Card cover image -
-
- Card cover image -
-
-
-
- - - -
-
-
-
- Card cover image - Card cover image - Card cover image - Card cover image -
You and 24 more liked this
-
- -
- - -
-
-
- - - -
- Card cover image -
- Caroline Lundu - 29 minutes ago -
- - - - - - - - - - -
-
- Hey!! I never saw this one, it was amazing.. I think I’m going to buy myself a set and try his technique at home! -
-
-
-
- Card cover image -
-
-
Take a look behind the scenes of Rob Boss episodes
-
- We'll put a happy little sky in here. We touch the canvas, the canvas takes what it wants. A little happy sunlight shining through there. -
-
example.com
-
-
-
-
- - - -
-
-
-
- Card cover image - Card cover image - Card cover image - Card cover image -
You and 24 more liked this
-
- -
- - -
-
-
- - - -
- Card cover image -
- Marleah Eagleston - 29 minutes ago -
- - - - - - - - - - -
-
- Look at that sky! I so want to be there.. Can we arrange a trip? Is that a possibility? Please!!! -
-
-
- Card cover image -
-
- Card cover image -
-
-
- - - -
-
-
-
- Card cover image - Card cover image - Card cover image - Card cover image -
You and 24 more liked this
-
- -
- - -
-
-
- - - -
- Card cover image -
- Caroline Lundu - 29 minutes ago -
- - - - - - - - - - -
-
- Hey!! I never saw this episode, it was amazing.. I think I’m going to buy myself a set and try his technique at home! -
-
-
-
- Card cover image -
-
-
Rob Boss - Season 09 Episode 04
-
- We'll put a happy little sky in here. We touch the canvas, the canvas takes what it wants. A little happy sunlight shining through there. -
-
example.com
-
-
-
-
- - - -
-
-
-
- Card cover image - Card cover image - Card cover image - Card cover image -
You and 24 more liked this
-
- -
- - -
-
-
- -
- -
- -
diff --git a/src/app/modules/admin/pages/profile/profile.component.ts b/src/app/modules/admin/pages/profile/profile.component.ts deleted file mode 100644 index 1068add3..00000000 --- a/src/app/modules/admin/pages/profile/profile.component.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core'; - -@Component({ - selector : 'profile', - templateUrl : './profile.component.html', - encapsulation : ViewEncapsulation.None, - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class ProfileComponent -{ - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/pages/profile/profile.module.ts b/src/app/modules/admin/pages/profile/profile.module.ts deleted file mode 100644 index 82701f77..00000000 --- a/src/app/modules/admin/pages/profile/profile.module.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { MatButtonModule } from '@angular/material/button'; -import { MatDividerModule } from '@angular/material/divider'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatIconModule } from '@angular/material/icon'; -import { MatInputModule } from '@angular/material/input'; -import { MatMenuModule } from '@angular/material/menu'; -import { MatTooltipModule } from '@angular/material/tooltip'; -import { FuseCardModule } from '@fuse/components/card'; -import { SharedModule } from 'app/shared/shared.module'; -import { ProfileComponent } from 'app/modules/admin/pages/profile/profile.component'; -import { profileRoutes } from 'app/modules/admin/pages/profile/profile.routing'; - -@NgModule({ - declarations: [ - ProfileComponent - ], - imports : [ - RouterModule.forChild(profileRoutes), - MatButtonModule, - MatDividerModule, - MatFormFieldModule, - MatIconModule, - MatInputModule, - MatMenuModule, - MatTooltipModule, - FuseCardModule, - SharedModule - ] -}) -export class ProfileModule -{ -} diff --git a/src/app/modules/admin/pages/profile/profile.routing.ts b/src/app/modules/admin/pages/profile/profile.routing.ts deleted file mode 100644 index 4bde57d4..00000000 --- a/src/app/modules/admin/pages/profile/profile.routing.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Route } from '@angular/router'; -import { ProfileComponent } from 'app/modules/admin/pages/profile/profile.component'; - -export const profileRoutes: Route[] = [ - { - path : '', - component: ProfileComponent - } -]; diff --git a/src/app/modules/admin/ui/angular-material/angular-material.component.html b/src/app/modules/admin/ui/angular-material/angular-material.component.html deleted file mode 100644 index f532ae9c..00000000 --- a/src/app/modules/admin/ui/angular-material/angular-material.component.html +++ /dev/null @@ -1,73 +0,0 @@ -
- - -
-
- -
- -
- -
-

- Angular Material -

-
-
-
- - -
- -
- -

- Fuse uses - Angular Material - - as its primary user interface library. It offers form controls, - buttons, tabs, sidebars, icons, modals, tooltips, data tables and many more well tested and - widely used components. -

-

- Even though Fuse doesn't follow Google's Material design specifications, Angular Material - is one of the best Angular component libraries out there and since it's developed and maintained - by Google itself, it offers the best compatibility and support for Angular. -

-

- Fuse is 100% compatible with all Angular Material components. -

- -

Component examples and API documentation

-

- Because it makes this demo app very heavy and unusable, we don't showcase any of the components - within this demo. It also makes it harder for us to upgrade to the latest version of the Angular - Material whenever there is a new version, simply because we have to update all the component demos - as well, and it's not an easy task. -

-

- With that being said, you should always refer to the official docs, they always have the latest version - up and running so you won't end up with an outdated examples and/or API documentation. -

- -

Official docs

-

- Angular Material examples and API documentation: - https://material.angular.io/components/categories - -

-
- -
- -
diff --git a/src/app/modules/admin/ui/angular-material/angular-material.component.ts b/src/app/modules/admin/ui/angular-material/angular-material.component.ts deleted file mode 100644 index 5bce8e1a..00000000 --- a/src/app/modules/admin/ui/angular-material/angular-material.component.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; - -@Component({ - selector : 'angular-material', - templateUrl : './angular-material.component.html', - encapsulation: ViewEncapsulation.None -}) -export class AngularMaterialComponent -{ - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/ui/angular-material/angular-material.module.ts b/src/app/modules/admin/ui/angular-material/angular-material.module.ts deleted file mode 100644 index e9f50694..00000000 --- a/src/app/modules/admin/ui/angular-material/angular-material.module.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { NgModule } from '@angular/core'; -import { Route, RouterModule } from '@angular/router'; -import { SharedModule } from 'app/shared/shared.module'; -import { AngularMaterialComponent } from 'app/modules/admin/ui/angular-material/angular-material.component'; - -export const routes: Route[] = [ - { - path : '', - component: AngularMaterialComponent - } -]; - -@NgModule({ - declarations: [ - AngularMaterialComponent - ], - imports : [ - RouterModule.forChild(routes), - SharedModule - ] -}) -export class AngularMaterialModule -{ -} diff --git a/src/app/modules/admin/ui/animations/animations.component.html b/src/app/modules/admin/ui/animations/animations.component.html deleted file mode 100644 index 50308dc7..00000000 --- a/src/app/modules/admin/ui/animations/animations.component.html +++ /dev/null @@ -1,2018 +0,0 @@ -
- - -
-
- -
- -
- -
-

- Animations -

-
-
-
- - -
- -
- -

- Fuse provides set of ready-to-use animations for convenience. You can access them by importing the FuseAnimations and set it as the - animations property of the @Component metadata. -

- -

Module

- - -

Usage

- - - - -

Animations

- - - - -

Expand / Collapse

- -

- This animation can be triggered in two ways; -

-
    -
  1. - Adding [@expandCollapse]="state" to the element and toggling the state - between the 'collapsed' and 'expanded' strings manually. -
  2. -
  3. - Adding @expandCollapse to the element and using *ngIf to toggle the - element. -
  4. -
-

- The animation can be disabled by setting the state to false; [@expandCollapse]="false" -

- -
- -
-
Expand / Collapse
-
- - - -
-
- - - - - - - -
-
- Animated box -
-
- -
- -
- - - - - - - - - -
- -
- - - - -

Shake

-

- This animation can be triggered in two ways; -

-
    -
  1. - Adding [@shake]="state" to the element and toggling the state - between the false and true manually. -
  2. -
  3. - Adding @shake to the element and using *ngIf to toggle the - element. -
  4. -
-

- The animation can be disabled by setting the state to false; [@shake]="false" -

- -
- -
-
Shake
-
- - - -
-
- - - - - - - -
- -
-
- Animated box -
-
- -
- -
- -
- - - - - - - - - -
- -
- - - - -

Fade In

-

- Fade In animation can be triggered in two ways; -

-
    -
  1. - Adding [@fadeIn]="state" to the element and toggling the state - between the 'void' and '*' strings manually. -
  2. -
  3. - Adding @fadeIn to the element and using *ngIf to toggle the - element. -
  4. -
-

- The animation can be disabled by setting the state to false; [@fadeIn]="false" -

- - Direction - - In - Top - Bottom - Left - Right - - - - -
- -
-
Fade In
-
- - - - - -
-
- - - - - - - -
- -
-
Animated box
-
- -
- -
- -
- - - - - - - - - -
- -
- - -
- -
-
Fade In Top
-
- - - - - -
-
- - - - - - - -
- -
-
Animated box
-
- -
- -
- -
- - - - - - - - - -
- -
- - -
- -
-
Fade In Bottom
-
- - - - - -
-
- - - - - - - -
- -
-
Animated box
-
- -
- -
- -
- - - - - - - - - -
- -
- - -
- -
-
Fade In Left
-
- - - - - -
-
- - - - - - - -
- -
-
Animated box
-
- -
- -
- -
- - - - - - - - - -
- -
- - -
- -
-
Fade In Right
-
- - - - - -
-
- - - - - - - -
- -
-
Animated box
-
- -
- -
- -
- - - - - - - - - -
- -
- - - - -

Fade Out

-

- Fade Out animation can be triggered in two ways; -

-
    -
  1. - Adding [@fadeOut]="state" to the element and toggling the state - between the 'void' and '*' strings manually. -
  2. -
  3. - Adding @fadeOut to the element and using *ngIf to toggle the - element. -
  4. -
-

- The animation can be disabled by setting the state to false; [@fadeOut]="false" -

- - Direction - - Out - Top - Bottom - Left - Right - - - - -
- -
-
Fade Out
-
- - - - - -
-
- - - - - - - -
- -
-
Animated box
-
- -
- -
- -
- - - - - - - - - -
- -
- - -
- -
-
Fade Out Top
-
- - - - - -
-
- - - - - - - -
- -
-
Animated box
-
- -
- -
- -
- - - - - - - - - -
- -
- - -
- -
-
Fade Out Bottom
-
- - - - - -
-
- - - - - - - -
- -
-
Animated box
-
- -
- -
- -
- - - - - - - - - -
- -
- - -
- -
-
Fade Out Left
-
- - - - - -
-
- - - - - - - -
- -
-
Animated box
-
- -
- -
- -
- - - - - - - - - -
- -
- - -
- -
-
Fade Out Right
-
- - - - - -
-
- - - - - - - -
- -
-
Animated box
-
- -
- -
- -
- - - - - - - - - -
- -
- - - - -

Slide In

-

- Slide In animation can be triggered in two ways; -

-
    -
  1. - Adding [@slideIn]="state" to the element and toggling the state - between the 'void' and '*' strings manually. -
  2. -
  3. - Adding @slideIn to the element and using *ngIf to toggle the - element. -
  4. -
-

- The animation can be disabled by setting the state to false; [@slideIn]="false" -

- - Direction - - Top - Bottom - Left - Right - - - - -
- -
-
Slide In Top
-
- - - - - -
-
- - - - - - - -
- -
-
Animated box
-
- -
- -
- -
- - - - - - - - - -
- -
- - -
- -
-
Slide In Bottom
-
- - - - - -
-
- - - - - - - -
- -
-
Animated box
-
- -
- -
- -
- - - - - - - - - -
- -
- - -
- -
-
Slide In Left
-
- - - - - -
-
- - - - - - - -
- -
-
Animated box
-
- -
- -
- -
- - - - - - - - - -
- -
- - -
- -
-
Slide In Right
-
- - - - - -
-
- - - - - - - -
- -
-
Animated box
-
- -
- -
- -
- - - - - - - - - -
- -
- - - - -

Slide Out

-

- Slide Out animation can be triggered in two ways; -

-
    -
  1. - Adding [@slideOut]="state" to the element and toggling the state - between the 'void' and '*' strings manually. -
  2. -
  3. - Adding @slideOut to the element and using *ngIf to toggle the - element. -
  4. -
-

- The animation can be disabled by setting the state to false; [@slideOut]="false" -

- - Direction - - Top - Bottom - Left - Right - - - - -
- -
-
Slide Out Top
-
- - - - - -
-
- - - - - - - -
- -
-
Animated box
-
- -
- -
- -
- - - - - - - - - -
- -
- - -
- -
-
Slide Out Bottom
-
- - - - - -
-
- - - - - - - -
- -
-
Animated box
-
- -
- -
- -
- - - - - - - - - -
- -
- - -
- -
-
Slide Out Left
-
- - - - - -
-
- - - - - - - -
- -
-
Animated box
-
- -
- -
- -
- - - - - - - - - -
- -
- - -
- -
-
Slide Out Right
-
- - - - - -
-
- - - - - - - -
- -
-
Animated box
-
- -
- -
- -
- - - - - - - - - -
- -
- - - - -

Zoom In

-

- Zoom In animation can be triggered in two ways; -

-
    -
  1. - Adding [@zoomIn]="state" to the element and toggling the state - between the 'void' and '*' strings manually. -
  2. -
  3. - Adding @zoomIn to the element and using *ngIf to toggle the - element. -
  4. -
-

- The animation can be disabled by setting the state to false; [@zoomIn]="false" -

- -
- -
-
Zoom In
-
- - - - - -
-
- - - - - - - -
- -
-
Animated box
-
- -
- -
- -
- - - - - - - - - -
- -
- - - - -

Zoom Out

-

- Zoom Out animation can be triggered in two ways; -

-
    -
  1. - Adding [@zoomOut]="state" to the element and toggling the state - between the 'void' and '*' strings manually. -
  2. -
  3. - Adding @zoomOut to the element and using *ngIf to toggle the - element. -
  4. -
-

- The animation can be disabled by setting the state to false; [@zoomOut]="false" -

- -
- -
-
Zoom Out
-
- - - - - -
-
- - - - - - - -
- -
-
Animated box
-
- -
- -
- -
- - - - - - - - - -
- -
- -
- -
- -
diff --git a/src/app/modules/admin/ui/animations/animations.component.scss b/src/app/modules/admin/ui/animations/animations.component.scss deleted file mode 100644 index 3ff05f93..00000000 --- a/src/app/modules/admin/ui/animations/animations.component.scss +++ /dev/null @@ -1,62 +0,0 @@ -animations { - - .mat-form-field { - width: 100%; - margin-top: 32px; - } - - mat-tab-group { - - .mat-tab-header { - padding: 24px 0; - border-top-width: 1px; - } - - .mat-tab-body-wrapper { - - .mat-tab-body { - - &:first-child { - - .mat-tab-body-content { - display: flex; - justify-content: center; - min-height: 200px; - } - } - - .animated-box { - width: 120px; - height: 120px; - overflow: hidden; - border-radius: 4px; - cursor: pointer; - user-select: none; - - .animated-box-content { - display: flex; - align-items: center; - justify-content: center; - flex: 1 0 auto; - height: 100%; - text-align: center; - font-size: 12px; - font-weight: 500; - } - } - } - } - } - - .info { - @apply text-secondary bg-gray-400; - } - - .animated-box { - @apply bg-primary shadow-md; - - .animated-box-content { - @apply text-on-primary; - } - } -} diff --git a/src/app/modules/admin/ui/animations/animations.component.ts b/src/app/modules/admin/ui/animations/animations.component.ts deleted file mode 100644 index de5e94b8..00000000 --- a/src/app/modules/admin/ui/animations/animations.component.ts +++ /dev/null @@ -1,151 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; -import { FuseAnimations } from '@fuse/animations'; - -@Component({ - selector : 'animations', - templateUrl : './animations.component.html', - styleUrls : ['./animations.component.scss'], - animations : FuseAnimations, - encapsulation: ViewEncapsulation.None -}) -export class AnimationsComponent -{ - animationStates: any; - visibilityStates: any; - - /** - * Constructor - */ - constructor() - { - // Set the defaults - this.animationStates = { - expandCollapse: 'expanded', - fadeIn : { - direction: 'in', - in : '*', - top : '*', - bottom : '*', - left : '*', - right : '*' - }, - fadeOut : { - direction: 'out', - out : '*', - top : '*', - bottom : '*', - left : '*', - right : '*' - }, - shake : { - shake: true - }, - slideIn : { - direction: 'top', - top : '*', - bottom : '*', - left : '*', - right : '*' - }, - slideOut : { - direction: 'top', - top : '*', - bottom : '*', - left : '*', - right : '*' - }, - zoomIn : { - in: '*' - }, - zoomOut : { - out: '*' - } - }; - - this.visibilityStates = { - expandCollapse: true, - fadeIn : { - in : true, - top : true, - bottom: true, - left : true, - right : true - }, - fadeOut : { - out : true, - top : true, - bottom: true, - left : true, - right : true - }, - shake : { - shake: true - }, - slideIn : { - top : true, - bottom: true, - left : true, - right : true - }, - slideOut : { - top : true, - bottom: true, - left : true, - right : true - }, - zoomIn : { - in: true - }, - zoomOut : { - out: true - } - }; - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Toggle animation state - * - * @param animation - * @param firstState - * @param secondState - * @param timeout - */ - toggleAnimationState(animation: string, firstState: string | boolean, secondState: string | boolean, timeout: number = 500): void - { - // Split the animation - const animationPath = animation.split('.'); - - // Toggle the animation state - this.animationStates[animationPath[0]][animationPath[1]] = firstState; - - setTimeout(() => { - this.animationStates[animationPath[0]][animationPath[1]] = secondState; - }, timeout); - } - - /** - * Toggle visibility state - * - * @param animation - * @param timeout - */ - toggleVisibilityState(animation: string, timeout: number = 500): void - { - // Split the animation - const animationPath = animation.split('.'); - - // Toggle the visibility status - this.visibilityStates[animationPath[0]][animationPath[1]] = false; - this.animationStates[animationPath[0]][animationPath[1]] = 'void'; - - setTimeout(() => { - this.visibilityStates[animationPath[0]][animationPath[1]] = true; - this.animationStates[animationPath[0]][animationPath[1]] = '*'; - }, timeout); - } - -} diff --git a/src/app/modules/admin/ui/animations/animations.module.ts b/src/app/modules/admin/ui/animations/animations.module.ts deleted file mode 100644 index 875e7bd9..00000000 --- a/src/app/modules/admin/ui/animations/animations.module.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { NgModule } from '@angular/core'; -import { Route, RouterModule } from '@angular/router'; -import { MatButtonModule } from '@angular/material/button'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatSelectModule } from '@angular/material/select'; -import { MatTabsModule } from '@angular/material/tabs'; -import { FuseHighlightModule } from '@fuse/components/highlight'; -import { SharedModule } from 'app/shared/shared.module'; -import { AnimationsComponent } from 'app/modules/admin/ui/animations/animations.component'; - -export const routes: Route[] = [ - { - path : '', - component: AnimationsComponent - } -]; - -@NgModule({ - declarations: [ - AnimationsComponent - ], - imports : [ - RouterModule.forChild(routes), - MatButtonModule, - MatFormFieldModule, - MatSelectModule, - MatTabsModule, - FuseHighlightModule, - SharedModule - ] -}) -export class AnimationsModule -{ -} diff --git a/src/app/modules/admin/ui/cards/cards.component.html b/src/app/modules/admin/ui/cards/cards.component.html deleted file mode 100644 index fb5fd024..00000000 --- a/src/app/modules/admin/ui/cards/cards.component.html +++ /dev/null @@ -1,4263 +0,0 @@ -
- - -
-
- -
- -
- -
-

- Cards -

-
-
-
- - -
- -
- - - - {{filter | titlecase}} - ({{numberOfCards[filter]}}) - - - -
- -
- - - - Card cover image -
-
Most beautiful and quite places to see
-
From rocky mountains to crystal clear lakes, there are the places you must see and enjoy.
-
-
- - - - - Card cover image -
-
Rocky mountain tops
-
Updated with 20 new locations
-
From rocky mountains to crystal clear lakes, there are the places you must see and enjoy.
-
-
- - - - - - Card cover image -
-
Most beautiful and quite places to see
-
From rocky mountains to crystal clear lakes, there are the places you must see and enjoy.
-
- -
-
-
- -
- -
-
- Most beautiful and quite places to see -
-
- From rocky mountains to crystal clear lakes, these are the places you must see and enjoy. - You can bring your own food and have a little picnic on top of the amazing grasslands. -
-
- From rocky mountains to crystal clear lakes, these are the places you must see and enjoy. - You can bring your own food and have a little picnic on top of the amazing grasslands. -
-
-
-
-
- - - - - Card cover image -
-
Rocky mountain tops
-
Updated with 20 new locations
-
From rocky mountains to crystal clear lakes, there are the places you must see and enjoy.
-
- -
-
-
- - - - - Card cover image -
-
Rocky mountain tops
-
Updated with 20 new locations
-
From rocky mountains to crystal clear lakes, there are the places you must see and enjoy.
-
- -
-
- - -
-
-
Open now:
-
08:00AM - 09:00PM
-
-
-
Entrance fee:
-
$20 (USD)
-
-
-
-
- - - - - Card cover image -
-
TRAVEL
-
Most beautiful and quite places to see
-
- Card cover image -
- Galen Lewis - 23 hours ago -
-
-
-
- - - - - Card cover image -
Most beautiful and quite places to see
-
- - - - - Card cover image -
From rocky mountains to crystal clear lakes, there are the places you must see and enjoy.
-
- - - - - Card cover image -
-
Rocky mountain tops
-
Updated with 20 new locations
-
-
- - - - - Card cover image -
-
Most beautiful and quite places to see
-
- -
-
-
- - - - - Card cover image -
-
Rocky mountain tops
-
Updated with 20 new locations
-
- -
-
-
- - - - -
-
Most beautiful and quite places to see
-
- From rocky mountains to crystal clear lakes, these are the places you must see and enjoy. - In summers you can bring your food and have a little picnic on top of the amazing grasslands. - In winters you can still enjoy them but with couple of inches snow on top of those grasslands. -
-
- -
-
-
- - - - -
Most beautiful and quite places to see
-
- From rocky mountains to crystal clear lakes, these are the places you must see and enjoy. - In summers you can bring your food and have a little picnic on top of the amazing grasslands. - In winters you can still enjoy them but with couple of inches snow on top of those grasslands. -
-
- - - - -
Rocky mountain tops
-
Updated with 20 new locations
-
- From rocky mountains to crystal clear lakes, these are the places you must see and enjoy. - In summers you can bring your food and have a little picnic on top of the amazing grasslands. - In winters you can still enjoy them but with couple of inches snow on top of those grasslands. -
-
- - - - -
- Card cover image -
-
Mountain tops
-
Travel locations
-
-
-
From rocky mountains to crystal clear lakes, these are the places you must see and enjoy.
-
- -
-
- - - - -
-
-
Mountain tops
-
Travel locations
-
- Card cover image -
-
From rocky mountains to crystal clear lakes, these are the places you must see and enjoy.
-
- -
-
- - - - -
- Card cover image -
-
-
Mountain tops and clear lakes
-
Updated with 20 new locations
-
- From rocky mountains to crystal clear lakes, these are the places you must see and enjoy. - You can bring your own food and have a little picnic on top of the amazing grasslands. -
-
- -
-
-
- - - - -
-
Mountain tops and clear lakes
-
Updated with 20 new locations
-
- From rocky mountains to crystal clear lakes, these are the places you must see and enjoy. - You can bring your own food and have a little picnic on top of the amazing grasslands. -
-
- -
-
-
- Card cover image -
-
- - - - - Card cover image -
-
Puzzles Coffee Shop
-
-
- - - - - -
-
4.5
-
-
98 reviews
-
-
- Puzzles coffee shop is one of the finest coffee shops in central downtown in New York. - It's quiet; far away from busy streets and never ending constructions. -
-
- - -
-
-
- - - - -
Puzzles Coffee Shop
-
-
- - - - - -
-
4.5
-
-
98 reviews
-
-
- Puzzles coffee shop is one of the finest coffee shops in central downtown in New York. It's quiet; far away from busy streets and never ending constructions. -
-
- - -
-
- - - - -
- Card cover image -
-
-
Puzzles Coffee Shop
-
-
- - - - - -
-
4.5
-
-
98 reviews
-
-
- Puzzles coffee shop is one of the finest coffee shops in central downtown in New York. - It's quiet; far away from busy streets and never ending constructions. -
-
- - -
-
-
- - - - -
-
Puzzles Coffee Shop
-
-
- - - - - -
-
4.5
-
-
98 reviews
-
-
-
- $$ - - Arabian, Brazilian, Colombian -
-
- 774 Riverview St. -
-
- Open - - 07:00AM Weekdays - - 10:00AM Weekends -
-
-
- - -
-
-
- Card cover image -
-
- - - - -
-
News
-
- - - - -
-
-
-
- -
20% OFF in your favorite hats shop on next Friday.
-
-
- -
Upcoming meetups within 20 miles. - See details - -
-
-
- -
Concerts from your favorite bands available within 100 miles. - See details - -
-
-
-
- -
-
- - - - -
-
Groups
-
- - - - -
-
-
-
- Card cover image -
-
The Port Cafe
-
Best cafe of the downtown New York
-
1.2k followers
-
-
-
- Card cover image -
-
Design House LLC.
-
UI/UX, brand and product design
-
957 followers
-
-
-
- Card cover image -
-
Crax Laser Tag
-
30% off with group of 6 people
-
342 followers
-
-
-
- Card cover image -
-
Roadster Clothing Inc.
-
$25 off on orders $500 and over
-
4.7k followers
-
-
-
-
- -
-
- - - - -
-
Friend Suggestions
-
- - - - -
-
-
-
- Card cover image -
-
Amelia Edwards
-
3 mutual friends
-
-
-
- Card cover image -
-
Lew Silverton
-
3 mutual friends
-
-
-
- Card cover image -
-
Leanne Simpson
-
Went to same high school
-
-
-
- Card cover image -
-
Cecilia Pozo
-
Went to same college
-
-
-
-
- -
-
- - - - -
-
Activity Feed
-
- - - - -
-
-
-
- Card cover image -
-
Amelia Edwards commented on John Silverton's photo
-
4 minutes ago
-
-
-
- Card cover image -
-
Lew Silverton changed his profile photo
-
25 minutes ago
-
-
-
- Card cover image -
-
Brian Hughes liked your photo
-
3 hours ago
-
-
-
- Card cover image -
-
Marleah Eagleston commented on John Silverton's photo
-
Yesterday
-
-
-
-
- -
-
- - - - -
-
Shopping List
-
- - - - - - -
-
-
- - Tomatoes - - - Milk - - - Eggs - - - Bread - - - Coffee - - - Olives - - - Sour Cream - - - Peanut Butter - - - Strawberry Jam - - - Cheese - -
-
- -
-
- - - - -
-
Today's Tasks
-
- - - - - -
-
-
- - USER INTERFACE (5) -
-
- - Design user profile - - - Design dashboard - - - Create auth flow prototype - - - Re-design auth pages - - - Design landing page - -
-
- - DESIGN SYSTEM (3) -
-
- - Refine basic elements - - - List all the re-usable elements - - - Add standard form elements - -
-
- - - - -
-
Daily Schedule
-
- - - - - -
-
-
-
-
Code review
-
11:00 AM
-
-
-
Lunch with Sam
-
12:30 PM
-
-
-
Presentation of weekly usage and analytics report
-
01:45 PM
-
-
-
Meeting with new interns
-
02:30 PM
-
-
-
Coffee break & John's birthday
-
03:30 PM
-
-
-
Dinner with wife and kids
-
07:30 PM
-
-
-
- - - - -
Customer Reviews
-
- 4.74 average based on 508 reviews -
-
-
-
5 star
- -
87%
-
-
-
4 star
- -
7%
-
-
-
3 star
- -
1%
-
-
-
2 star
- -
1%
-
-
-
1 star
- -
2%
-
-
-
- -
-
- - - - -
-
Followers
-
- - - - -
-
-
-
- Card cover image - Card cover image - Card cover image - Card cover image -
-
- Card cover image - Card cover image - Card cover image - Card cover image -
-
- Card cover image - Card cover image - Card cover image - Card cover image -
-
- Card cover image - Card cover image - Card cover image - Card cover image -
-
-
- -
-
- - - - -
-
Gallery
-
- - - - - -
-
-
-
- Card cover image - Card cover image - Card cover image - Card cover image -
-
- Card cover image - Card cover image - Card cover image - Card cover image -
-
- Card cover image - Card cover image - Card cover image - Card cover image -
-
- Card cover image - Card cover image - Card cover image - Card cover image -
-
-
- -
-
- - - - - Card cover image -
-
-
-
FURNISHED MANSION
-
USD $24.000.000
-
- -
-
- - -
-
-
- - - - - Card cover image -
-
-
-
FURNISHED MANSION
-
USD $24.000.000
-
1 E. Pumpkin Hill Drive
-
- -
-
-
- 10 beds - - 4 baths - - 21k sqft. -
-
-
- - -
-
-
- - - - -
- -
-
Support
-
Contact support to learn more about our products and get professional help
- -
- - - - - -
Branding & Product Design
-
Brand strategy, purpose, and product positioning
-
- Card cover image - Card cover image - Card cover image - Card cover image - Card cover image -
-
+13 more
- -
- - - - - Card cover image -
Brian Hughes
-
London, UK
-
-
-
- 1.2k - POSTS -
-
- 200k - FOLLOWERS -
-
- 1.2k - FOLLOWING -
-
-
-
I’m a friendly kitchen assistant who suffers from a severe phobia of buttons
- -
- - - - -
About Me
-
- I’m a friendly kitchen assistant who suffers from a severe phobia of buttons. -

- Brother of Elijah Jay Watkins, who has phobia of buttons and trust issues. -
-
-
-
- - London, UK -
-
- - ACME Corp. Lead UX Designer -
-
- - April, 24 -
-
- -
- - - - -
- Card cover image -
-
-
- Card cover image -
-
-
-
-
-
Brian Hughes
-
London, UK
-
-
- -
-
-
-
-
4 mutual friends
-
- Card cover image - Card cover image - Card cover image - Card cover image -
-
-
-
- - - - - Card cover image -
-
Brian Hughes
-
London, UK
-
-
- - - - -
-
Brian Hughes
-
London, UK
-
- Card cover image -
- - - - - Card cover image -
-
Brian Hughes
-
Head of HR Department
-
h.brian@company.com
-
-
- - - - -
-
Brian Hughes
-
Head of HR Department
-
h.brian@company.com
-
- Card cover image -
- - - - - -
-
1 new mail
-
Mailbox
-
-
- - - - -
-
New message
-
from John Balista
-
- -
- - - - - Card cover image -
-
Lavender Bouquet
-
USD $5
-
5 left in stock
-
-
- - - - -
-
Lavender Bouquet
-
USD $5
-
5 left in stock
-
- Card cover image -
- - - - -
Personal
-
Perfect for an individual or a small team starting to get bigger
-
- -
-
USD
-
$6.00
-
- -
-
billed monthly
-
$6.00 billed yearly
-
- - - -
-
Core features, including:
-
-
- -
10 projects
-
-
- -
5GB storage
-
-
- -
Analytics
-
-
- -
Free mobile app
-
-
- -
Access to forums
-
-
-
-
- - - - -
Personal
- -
-
$6
-
/ month
-
- -
-
billed monthly
-
$6.00 billed yearly
-
- -
-
10 projects
-
5GB storage
-
Analytics
-
Free mobile app
-
Access to forums
-
- - -
- - - -
-
Lifetime Membership
-
- Learn from like-minded individuals which are eager to make a living building stuff on the web. Pay once and get lifetime access to the community. -
-
-
INCLUDED FEATURES
-
-
- -
-
- -
Private forum access
-
-
- -
Access to annual online conference
-
-
- -
Member resources
-
-
- -
Official member T-Shirt
-
-
-
- -
-
-
$599
-
USD
-
-
-
No monthly subscription,
-
you only pay once.
-
- -
-
- - - - -
-
- - -
- Card cover image -
-
-
-
Black sneakers with white stripes
-
$240.00
-
-
-
- Select a size: - 39 - 40 - 41 - 42 - 43 -
-
- -
-
-
- - - - -
- Card cover image -
-
-
Gray sneakers with white stripes
-
ALIDAS
-
$240.00
-
- Select a size: - 39 - 40 - 41 - 42 - 43 -
-
-
- - - -
-
-
- - - - -
- Card cover image -
-
-
-
White sneakers with red stripes
-
$240.00
-
-
- White sneakers are made of natural, biodegradable material. This feature alione makes them extremely nature friendly. -
-
- Select a size: - 39 - 40 - 41 - 42 - 43 -
-
-
- - - -
-
-
- - - - - -
-            - Puzzles coffee shop is one of the finest coffee shops in central downtown in New York. - It's quiet; far away from busy streets and never ending constructions. -
-
- — Melissa Morillo, Comtent -
-
- - - - -
- Puzzles coffee shop is one of the finest coffee shops in central downtown in New York. - It's quiet; far away from busy streets and never ending constructions. -
-
- - Card cover image - - MELISSA MORILLO - COMTENT -
-
- - - - -
- Card cover image -
-
-
- Puzzles coffee shop is one of the finest coffee shops in central downtown in New York. - It's quiet; far away from busy streets and never ending constructions. -
-
- — Melissa Morillo, Comtent -
-
-
- - - - - Card cover image -
-
- Puzzles coffee shop is one of the finest coffee shops in central downtown in New York. - It's quiet; far away from busy streets and never ending constructions. -
-
- — Melissa Morillo, Comtent -
-
-
- - - - -
Create Post
-
-
- Card cover image -
Brian Hughes
-
- - - -
-
- - - - - - - - - - - -
-
- - - - -
- Card cover image -
- Caroline Lundu - 29 minutes ago -
- - - - - - - - - - -
-
- Look at that sky! I so want to be there.. Can we arrange a trip? Is that a possibility? Please!!! -
-
- Card cover image -
- -
-
-
- - - -
-
-
-
- Card cover image - Card cover image - Card cover image - Card cover image -
You and 24 more liked this
-
- -
- - -
-
- - -
-
-
- Card cover image - - - -
-
- - - -
-
-
-
-
-
- Card cover image -
- - Rutherford Brannan Oh, I’m in.. Let’s arrange a trip for the next weekend if you want! - -
- Like - - Reply - - Hide replies - - - 17 min -
-
-
-
- Card cover image -
- - Caroline Lundu Yes!! Let's talk about it on lunch! - -
- Like - - Reply - - - 15 min -
-
-
-
- Card cover image -
- - Barbara Cotilla Count me in !!! - -
- Like - - Reply - - - 12 min -
-
-
-
- Card cover image -
- - Alan Marti The color of the sky doesn’t look natural at all, do you really think this is natural? I’d say Photoshop! - Your trip isn't going to worth it since you won't be seeing this exact sky. - -
- Like - - Reply - - Hide replies - - - 24 min -
-
-
-
- Card cover image -
- - Caroline Lundu Hey, Alan! You must be fun at parties! - -
- Like - - Reply - - - 22 min -
-
-
-
- Card cover image -
- - Alan Marti Caroline, I'm telling the truth, and if you cannot stand the truth, maybe we shouldn't be friends anymore... - -
- Like - - Reply - - - 20 min -
-
-
-
- Card cover image -
- - Caroline Lundu Dude! Relax! I'm just messing with you... - -
- Like - - Reply - - - 18 min -
-
-
-
- Card cover image -
- - Alan Marti Sorry! I had a bad morning, let's talk about this in couple hours, I need to relax a bit :( - -
- Like - - Reply - - - 16 min -
-
-
-
- Card cover image -
- - Marleah Eagleston Count me in, too! - -
- Like - - Reply - - - 34 min -
-
-
-
-
-
-
- - - - -
- Card cover image -
- Marleah Eagleston - 29 minutes ago -
- - - - - - - - - - -
-
- Look at that sky! I so want to be there.. Can we arrange a trip? Is that a possibility? Please!!! -
-
-
- Card cover image -
-
- Card cover image -
-
-
- - - -
-
-
-
- Card cover image - Card cover image - Card cover image - Card cover image -
You and 24 more liked this
-
- -
- - -
-
-
- - - - -
- Card cover image -
- Marleah Eagleston - 29 minutes ago -
- - - - - - - - - - -
-
- Look at that sky! I so want to be there.. Can we arrange a trip? Is that a possibility? Please!!! -
-
-
- Card cover image -
-
-
- Card cover image -
-
- Card cover image -
-
-
-
- - - -
-
-
-
- Card cover image - Card cover image - Card cover image - Card cover image -
You and 24 more liked this
-
- -
- - -
-
-
- - - - -
- Card cover image -
- Marleah Eagleston - 29 minutes ago -
- - - - - - - - - - -
-
- Look at that sky! I so want to be there.. Can we arrange a trip? Is that a possibility? Please!!! -
-
-
-
- Card cover image -
-
- Card cover image -
-
-
-
- Card cover image -
-
- Card cover image -
-
-
-
- - - -
-
-
-
- Card cover image - Card cover image - Card cover image - Card cover image -
You and 24 more liked this
-
- -
- - -
-
-
- - - - -
- Card cover image -
- Marleah Eagleston - 29 minutes ago -
- - - - - - - - - - -
-
- Look at that sky! I so want to be there.. Can we arrange a trip? Is that a possibility? Please!!! -
-
-
-
- Card cover image -
-
- Card cover image -
-
-
-
- Card cover image -
-
- Card cover image -
-
- Card cover image -
-
-
-
- - - -
-
-
-
- Card cover image - Card cover image - Card cover image - Card cover image -
You and 24 more liked this
-
- -
- - -
-
-
- - - - -
- Card cover image -
- Marleah Eagleston - 29 minutes ago -
- - - - - - - - - - -
-
- Look at that sky! I so want to be there.. Can we arrange a trip? Is that a possibility? Please!!! -
-
-
-
- Card cover image -
-
- Card cover image -
-
-
-
- Card cover image -
-
- Card cover image -
-
-
- +12 - -
- Card cover image -
-
-
-
- - - -
-
-
-
- Card cover image - Card cover image - Card cover image - Card cover image -
You and 24 more liked this
-
- -
- - -
-
-
- - - - -
- Card cover image -
- Caroline Lundu - 29 minutes ago -
- - - - - - - - - - -
-
-

- We'll put a happy little sky in here. We touch the canvas, the canvas takes what it wants. A little happy sunlight shining through there. - Let's build some happy little clouds up here. I was blessed with a very steady hand; and it comes in very handy when you're doing these little delicate - things. This is the fun part. -

-

- Isn't it great to do something you can't fail at? Little trees and bushes grow however makes them happy. - Trees get lonely too, so we'll give him a little friend. There are no mistakes. You can fix anything that happens. -

-
-
- - - -
-
-
-
- Card cover image - Card cover image - Card cover image - Card cover image -
You and 24 more liked this
-
- -
- - -
-
-
- - - - -
- Card cover image -
- Caroline Lundu - 29 minutes ago -
- - - - - - - - - - -
-
- Hey!! I never saw this episode, it was amazing.. I think I’m going to buy myself a set and try his technique at home! -
-
-
-
- Card cover image -
-
-
Rob Boss - Season 09 Episode 04
-
- We'll put a happy little sky in here. We touch the canvas, the canvas takes what it wants. A little happy sunlight shining through there. -
-
example.com
-
-
-
-
- - - -
-
-
-
- Card cover image - Card cover image - Card cover image - Card cover image -
You and 24 more liked this
-
- -
- - -
-
-
- - - - -
- Card cover image -
- Caroline Lundu - 29 minutes ago -
- - - - - - - - - - -
-
- Hey!! I never saw this one, it was amazing.. I think I’m going to buy myself a set and try his technique at home! -
-
-
-
- Card cover image -
-
-
Take a look behind the scenes of Rob Boss episodes
-
- We'll put a happy little sky in here. We touch the canvas, the canvas takes what it wants. A little happy sunlight shining through there. -
-
example.com
-
-
-
-
- - - -
-
-
-
- Card cover image - Card cover image - Card cover image - Card cover image -
You and 24 more liked this
-
- -
- - -
-
-
- - - - -
-
- Card cover image - - - -
-
- - - -
-
-
-
-
-
- Card cover image -
- - Rutherford Brannan Oh, I’m in.. Let’s arrange a trip for the next weekend if you want! - -
- Like - - Reply - - Hide replies - - - 17 min -
-
-
-
- Card cover image -
- - Caroline Lundu Yes!! Let's talk about it on lunch! - -
- Like - - Reply - - - 15 min -
-
-
-
- Card cover image -
- - Barbara Cotilla Count me in !!! - -
- Like - - Reply - - - 12 min -
-
-
-
- Card cover image -
- - Alan Marti The color of the sky doesn’t look natural at all, do you really think this is natural? I’d say Photoshop! - Your trip isn't going to worth it since you won't be seeing this exact sky. - -
- Like - - Reply - - Hide replies - - - 24 min -
-
-
-
- Card cover image -
- - Caroline Lundu Hey, Alan! You must be fun at parties! - -
- Like - - Reply - - - 22 min -
-
-
-
- Card cover image -
- - Alan Marti Caroline, I'm telling the truth, and if you cannot stand the truth, maybe we shouldn't be friends anymore... - -
- Like - - Reply - - - 20 min -
-
-
-
- Card cover image -
- - Caroline Lundu Dude! Relax! I'm just messing with you... - -
- Like - - Reply - - - 18 min -
-
-
-
- Card cover image -
- - Alan Marti Sorry! I had a bad morning, let's talk about this in couple hours, I need to relax a bit :( - -
- Like - - Reply - - - 16 min -
-
-
-
- Card cover image -
- - Marleah Eagleston Count me in, too! - -
- Like - - Reply - - - 34 min -
-
-
-
-
-
-
- -
- -
diff --git a/src/app/modules/admin/ui/cards/cards.component.ts b/src/app/modules/admin/ui/cards/cards.component.ts deleted file mode 100644 index 187adc9f..00000000 --- a/src/app/modules/admin/ui/cards/cards.component.ts +++ /dev/null @@ -1,131 +0,0 @@ -import { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, QueryList, Renderer2, ViewChildren, ViewEncapsulation } from '@angular/core'; -import { MatButtonToggleChange } from '@angular/material/button-toggle'; -import { FuseCardComponent } from '@fuse/components/card'; - -@Component({ - selector : 'cards', - templateUrl : './cards.component.html', - styles : [ - ` - cards fuse-card { - margin: 16px; - } - ` - ], - encapsulation : ViewEncapsulation.None, - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class CardsComponent implements AfterViewInit -{ - @ViewChildren(FuseCardComponent, {read: ElementRef}) private _fuseCards: QueryList; - - filters: string[] = ['all', 'article', 'listing', 'list', 'info', 'shopping', 'pricing', 'testimonial', 'post', 'interactive']; - numberOfCards: any = {}; - selectedFilter: string = 'all'; - - /** - * Constructor - */ - constructor(private _renderer2: Renderer2) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * After view init - */ - ngAfterViewInit(): void - { - // Calculate the number of cards - this._calcNumberOfCards(); - - // Filter the cards for the first time - this._filterCards(); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * On filter change - * - * @param change - */ - onFilterChange(change: MatButtonToggleChange): void - { - // Set the filter - this.selectedFilter = change.value; - - // Filter the cards - this._filterCards(); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Private methods - // ----------------------------------------------------------------------------------------------------- - - private _calcNumberOfCards(): void - { - // Prepare the numberOfCards object - this.numberOfCards = {}; - - // Prepare the count - let count = 0; - - // Go through the filters - this.filters.forEach((filter) => { - - // For each filter, calculate the card count - if ( filter === 'all' ) - { - count = this._fuseCards.length; - } - else - { - count = this.numberOfCards[filter] = this._fuseCards.filter((fuseCard) => fuseCard.nativeElement.classList.contains('filter-' + filter)).length; - } - - // Fill the numberOfCards object with the counts - this.numberOfCards[filter] = count; - }); - } - - /** - * Filter the cards based on the selected filter - * - * @private - */ - _filterCards(): void - { - // Go through all fuse-cards - this._fuseCards.forEach((fuseCard) => { - - // If the 'all' filter is selected... - if ( this.selectedFilter === 'all' ) - { - // Remove hidden class from all cards - fuseCard.nativeElement.classList.remove('hidden'); - } - // Otherwise... - else - { - // If the card has the class name that matches the selected filter... - if ( fuseCard.nativeElement.classList.contains('filter-' + this.selectedFilter) ) - { - // Remove the hidden class - fuseCard.nativeElement.classList.remove('hidden'); - } - // Otherwise - else - { - // Add the hidden class - fuseCard.nativeElement.classList.add('hidden'); - } - } - }); - } -} diff --git a/src/app/modules/admin/ui/cards/cards.module.ts b/src/app/modules/admin/ui/cards/cards.module.ts deleted file mode 100644 index 363c3c17..00000000 --- a/src/app/modules/admin/ui/cards/cards.module.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { NgModule } from '@angular/core'; -import { Route, RouterModule } from '@angular/router'; -import { MatButtonModule } from '@angular/material/button'; -import { MatButtonToggleModule } from '@angular/material/button-toggle'; -import { MatCheckboxModule } from '@angular/material/checkbox'; -import { MatDividerModule } from '@angular/material/divider'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatIconModule } from '@angular/material/icon'; -import { MatInputModule } from '@angular/material/input'; -import { MatMenuModule } from '@angular/material/menu'; -import { MatProgressBarModule } from '@angular/material/progress-bar'; -import { MatTooltipModule } from '@angular/material/tooltip'; -import { FuseCardModule } from '@fuse/components/card'; -import { SharedModule } from 'app/shared/shared.module'; -import { CardsComponent } from 'app/modules/admin/ui/cards/cards.component'; - -export const routes: Route[] = [ - { - path : '', - component: CardsComponent - } -]; - -@NgModule({ - declarations: [ - CardsComponent - ], - imports : [ - RouterModule.forChild(routes), - MatButtonModule, - MatButtonToggleModule, - MatCheckboxModule, - MatDividerModule, - MatFormFieldModule, - MatIconModule, - MatInputModule, - MatMenuModule, - MatProgressBarModule, - MatTooltipModule, - FuseCardModule, - SharedModule - ] -}) -export class CardsModule -{ -} diff --git a/src/app/modules/admin/ui/colors/colors.component.html b/src/app/modules/admin/ui/colors/colors.component.html deleted file mode 100644 index c4ca72a7..00000000 --- a/src/app/modules/admin/ui/colors/colors.component.html +++ /dev/null @@ -1,143 +0,0 @@ -
- - -
-
- -
- -
- -
-

- Colors -

-
-
-
- - -
- -
- -

- Since Fuse uses Tailwind, all color related utilities such as text-red-50 or bg-indigo-900 - are available by default and they can be configured using Tailwind's configuration. -

- -

- In addition to default Tailwind colors, Fuse also provides utilities that changes depending on the selected theme. - These utilities are meant to be used in places where you want to have a theme dependent colors such as buttons, - backgrounds or texts. -

- -

Primary, Accent & Warn

-

- Fuse provides Primary, Accent and Warn utilities to go with - Angular Material theming. These utilities hold variable colors and they change depending on the selected theme color. -

-

- Having these utilities allow you to have dynamic theming throughout your application without hard coding any colors. - Each of these utilities also have a complementary .text-on-XXX utility to provide a contrasting text color. -

-
-
-
-
Primary
-
- bg-primary - text-on-primary -
-
-
Accent
-
- bg-accent - text-on-accent -
-
-
Warn
-
- bg-warn - text-on-warn -
-
-
Primary 200
-
- bg-primary-200 - text-on-primary-200 -
-
-
Accent 300
-
- bg-accent-300 - text-on-accent-300 -
-
-
Warn 400
-
- bg-warn-400 - text-on-warn-400 -
-
-
-

- You can change the theme from the Settings panel to observe the primary color changing. -

-

- These variable colors have different hue values just like a default Tailwind color palette and - they are also available for other Tailwind color utilities such as border, ring and etc: -

-

- bg-primary-50, text-accent-900, text-on-warn-500, border-primary, - ring-warn-600 ... -

- - -

Text and Background colors

-

- Fuse also provides set of utilities to have consistent text and background colors throughout your application without - hard coding any colors. They also allow working with dark variant of the selected theme. -

-

- For example, a text node with a .text-secondary class will have a proper lighter color compared to main text color - depending on the selected scheme. -

-

- Here's the complete list of the available text and background utilities: -

-
-
-
.text-default
-
.text-secondary
-
.text-hint
-
.text-disabled
-
.divider
-
-
-
.bg-card
-
.bg-default
-
.bg-dialog
-
.bg-hover
-
-
- -
- -
- -
diff --git a/src/app/modules/admin/ui/colors/colors.component.ts b/src/app/modules/admin/ui/colors/colors.component.ts deleted file mode 100644 index fd7aed8e..00000000 --- a/src/app/modules/admin/ui/colors/colors.component.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; -import { FuseAnimations } from '@fuse/animations'; - -@Component({ - selector : 'colors', - templateUrl : './colors.component.html', - animations : FuseAnimations, - encapsulation: ViewEncapsulation.None -}) -export class ColorsComponent -{ - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/ui/colors/colors.module.ts b/src/app/modules/admin/ui/colors/colors.module.ts deleted file mode 100644 index 62573086..00000000 --- a/src/app/modules/admin/ui/colors/colors.module.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { NgModule } from '@angular/core'; -import { Route, RouterModule } from '@angular/router'; -import { MatRippleModule } from '@angular/material/core'; -import { MatIconModule } from '@angular/material/icon'; -import { MatTabsModule } from '@angular/material/tabs'; -import { FuseHighlightModule } from '@fuse/components/highlight'; -import { SharedModule } from 'app/shared/shared.module'; -import { ColorsComponent } from 'app/modules/admin/ui/colors/colors.component'; - -export const routes: Route[] = [ - { - path : '', - component: ColorsComponent - } -]; - -@NgModule({ - declarations: [ - ColorsComponent - ], - imports : [ - RouterModule.forChild(routes), - MatIconModule, - MatRippleModule, - MatTabsModule, - FuseHighlightModule, - SharedModule - ] -}) -export class ColorsModule -{ -} diff --git a/src/app/modules/admin/ui/datatable/datatable.component.html b/src/app/modules/admin/ui/datatable/datatable.component.html deleted file mode 100644 index b73d82e3..00000000 --- a/src/app/modules/admin/ui/datatable/datatable.component.html +++ /dev/null @@ -1,52 +0,0 @@ -
- - -
-
- -
- -
- -
-

- Datatable -

-
-
-
- - -
- -
- -

- Since Fuse uses Angular Material, it's also possible to use their Table component. It offers base features like filtering, sorting and pagination as well as - some advanced ones like column re-ordering, column and row freezing and expandable rows. -

- -

Examples

-

- To keep this page simple and the Demo app as light as possible, we didn't add any examples here. Examples already can be found throughout the Demo app and also the - official Angular Material documentation has plenty of examples to get you started. -

- -

Official docs

-

- Angular Material Table examples and API documentation: - https://material.angular.io/components/table/overview - -

- -
- -
- -
diff --git a/src/app/modules/admin/ui/datatable/datatable.component.ts b/src/app/modules/admin/ui/datatable/datatable.component.ts deleted file mode 100644 index 6c507c81..00000000 --- a/src/app/modules/admin/ui/datatable/datatable.component.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; - -@Component({ - selector : 'datatable', - templateUrl : './datatable.component.html', - encapsulation: ViewEncapsulation.None -}) -export class DatatableComponent -{ - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/ui/datatable/datatable.module.ts b/src/app/modules/admin/ui/datatable/datatable.module.ts deleted file mode 100644 index 97a62ef9..00000000 --- a/src/app/modules/admin/ui/datatable/datatable.module.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { NgModule } from '@angular/core'; -import { Route, RouterModule } from '@angular/router'; -import { SharedModule } from 'app/shared/shared.module'; -import { DatatableComponent } from 'app/modules/admin/ui/datatable/datatable.component'; - -export const routes: Route[] = [ - { - path : '', - component: DatatableComponent - } -]; - -@NgModule({ - declarations: [ - DatatableComponent - ], - imports : [ - RouterModule.forChild(routes), - SharedModule - ] -}) -export class DatatableModule -{ -} diff --git a/src/app/modules/admin/ui/forms/fields/fields.component.html b/src/app/modules/admin/ui/forms/fields/fields.component.html deleted file mode 100644 index e2e54c5b..00000000 --- a/src/app/modules/admin/ui/forms/fields/fields.component.html +++ /dev/null @@ -1,770 +0,0 @@ -
- - -
-
- -
- -
- - Forms -
-
- -
-

- Fields -

-
-
-
- - -
- -
- -
-

- By default, Fuse changes the default form field appearance to fill and heavily modifies it to provide a more unique and consistent look. We - DO NOT recommend using any other form field styles as they are not optimized for Fuse. -

-

Appearance

-

- Here's a very simple form layout to showcase the form fields. -

-
- -
-
- - First name - - - - - Last name - - - -
-
- - Address - - - -
-
- - City - - - - - State - - - -
-
- - Postal code - - {{postalCode.value.length}} / 5 - - -
-
- -
-

Labels and Placeholders

-

- Following form contains examples to showcase different label and placeholder styles. All fields in this example are standard text inputs but everything - you see here can also be applied to other input types such as textarea, select, chips etc. -

-
- -
- - - - - Label - - - - Label and Placeholder - - - - Label and Placeholder on focus - - -
- -
-

Field variations

-

- Following form contains examples to showcase form field variations. In addition to the heavy modifications, - Fuse also provides set of helper classes to further modify the style of the form fields. -

-

Required classes

-
    -
  • -

    .fuse-mat-textarea

    -

    - This helper class is required if you are using a textarea as your input. Since Angular Material doesn't differentiate a textarea from a - normal input while using them with mat-form-field, this helper class is required for textarea inputs to look good and - consistent. -

    -
  • -
- - - -

Optional classes

-
    -
  • -

    .fuse-mat-dense

    -

    - Provides set of adjustments to make the fields denser. Dense fields are suitable for non-form usages and places where there isn't much space to work with such - as small dialogs, menus, popovers and etc. -

    -
  • -
  • -

    .fuse-mat-rounded

    -

    Provides set of adjustments to make the fields look fully rounded.

    -
  • -
  • -

    .fuse-mat-no-subscript

    -

    - Provides set of adjustments to remove the bottom spacing where hint and error messages placed. This helper is particularly useful to align the - field easily if you don't need to show error messages or hint text. For example a search bar in the toolbar uses this helper to fit the field to the toolbar - without having an extra bottom spacing. -

    -
  • -
  • -

    .fuse-mat-emphasized-affix

    -

    - Provides set of adjustments to emphasize the field prefix and suffix by changing their background color and adding a border around them. -

    -
  • -
- -

Usage

-

- <mat-form-field class="{{getFormFieldHelpersAsString()}}">...<mat-form-field> -

-

- - Dense - Rounded - No subscript - Emphasized affix - -

- -

With mat-label

-
- -
-
- - Input - - This is a hint text - -
-
- - Input with mat-icon as prefix & suffix - - - - -
-
- - Input with mat-icon-button as prefix & suffix - - - - -
-
- - Input with text prefix & suffix - - $ - .00 - -
-
- - Right aligned input with text prefix & suffix - - $ - .00 - -
-
- - Input with mat-select as prefix & suffix - - - EU - US - - - kg - gr - oz - - -
-
- - Textarea - - -
-
- - Textarea with prefix & suffix - - - - -
-
- - Textarea with autosize - - -
-
- - Textarea with autosize, prefix & suffix - - - - -
-
- - Select with prefix - - Select 1-1 Select 1-1 Select 1-1 Select 1-1 Select 1-1 Select 1-1 Select 1-1 - Select 1-2 - Select 1-3 - - - - - Select with suffix - - Select 2-1 Select 2-1 Select 2-1 Select 2-1 Select 2-1 Select 2-1 Select 2-1 - Select 2-2 - Select 2-3 - - - -
-
- - Native select with prefix - - - - - Native select with suffix - - - -
-
- - - - Lemon - - - - Lime - - - - Apple - - - - - -
-
- - Choose a date - - - - -
-
- -
-

Without mat-label

-
- -
-
- - - -
-
- - - - - -
-
- - - - - -
-
- - - $ - .00 - -
-
- - - $ - .00 - -
-
- - - - EU - US - - - kg - gr - oz - - -
-
- - - -
-
- - - - - -
-
- - - -
-
- - - - - -
-
- - - Select 1-1 Select 1-1 Select 1-1 Select 1-1 Select 1-1 Select 1-1 Select 1-1 - Select 1-2 - Select 1-3 - - - - - - Select 2-1 Select 2-1 Select 2-1 Select 2-1 Select 2-1 Select 2-1 Select 2-1 - Select 2-2 - Select 2-3 - - - -
-
- - - - - - - - -
-
- - - - Lemon - - - - Lime - - - - Apple - - - - - -
-
- - - - - -
-
- -
- -
- -
diff --git a/src/app/modules/admin/ui/forms/fields/fields.component.ts b/src/app/modules/admin/ui/forms/fields/fields.component.ts deleted file mode 100644 index 26dc8e61..00000000 --- a/src/app/modules/admin/ui/forms/fields/fields.component.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; -import { FormBuilder } from '@angular/forms'; - -@Component({ - selector : 'forms-fields', - templateUrl : './fields.component.html', - encapsulation: ViewEncapsulation.None -}) -export class FormsFieldsComponent -{ - formFieldHelpers: string[] = ['']; - - /** - * Constructor - */ - constructor(private _formBuilder: FormBuilder) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Get the form field helpers as string - */ - getFormFieldHelpersAsString(): string - { - return this.formFieldHelpers.join(' '); - } -} diff --git a/src/app/modules/admin/ui/forms/fields/fields.module.ts b/src/app/modules/admin/ui/forms/fields/fields.module.ts deleted file mode 100644 index d6b6f28c..00000000 --- a/src/app/modules/admin/ui/forms/fields/fields.module.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { NgModule } from '@angular/core'; -import { Route, RouterModule } from '@angular/router'; -import { MatButtonModule } from '@angular/material/button'; -import { MatButtonToggleModule } from '@angular/material/button-toggle'; -import { MatChipsModule } from '@angular/material/chips'; -import { MatDatepickerModule } from '@angular/material/datepicker'; -import { MatDividerModule } from '@angular/material/divider'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatIconModule } from '@angular/material/icon'; -import { MatInputModule } from '@angular/material/input'; -import { MatMenuModule } from '@angular/material/menu'; -import { MatMomentDateModule } from '@angular/material-moment-adapter'; -import { MatSelectModule } from '@angular/material/select'; -import { FuseAutogrowModule } from '@fuse/directives/autogrow'; -import { FuseHighlightModule } from '@fuse/components/highlight'; -import { SharedModule } from 'app/shared/shared.module'; -import { FormsFieldsComponent } from 'app/modules/admin/ui/forms/fields/fields.component'; - -export const routes: Route[] = [ - { - path : '', - component: FormsFieldsComponent - } -]; - -@NgModule({ - declarations: [ - FormsFieldsComponent - ], - imports : [ - RouterModule.forChild(routes), - MatButtonModule, - MatButtonToggleModule, - MatChipsModule, - MatDatepickerModule, - MatDividerModule, - MatFormFieldModule, - MatIconModule, - MatInputModule, - MatMenuModule, - MatMomentDateModule, - MatSelectModule, - FuseAutogrowModule, - FuseHighlightModule, - SharedModule - ] -}) -export class FormsFieldsModule -{ -} diff --git a/src/app/modules/admin/ui/forms/layouts/layouts.component.html b/src/app/modules/admin/ui/forms/layouts/layouts.component.html deleted file mode 100644 index 971a6547..00000000 --- a/src/app/modules/admin/ui/forms/layouts/layouts.component.html +++ /dev/null @@ -1,971 +0,0 @@ -
- - -
-
- -
- -
- - Forms -
-
- -
-

- Layouts -

-
-
-
- - -
- -
- -
-

- Forms are one of the most important and most used components of any web application. Below, you can find couple of ready to use form layout examples which you - can use as the base of your own forms. -

-
- - -
-

Sectioned form with dividers

-

- This sectioned form example uses dividers to separate the different sections of the form. Form fields uses placeholders and don't have separate labels - for more compact look. -

-
- -
-

Basic information

-

- Set your login preferences, help us personalize your experience and make big account changes here -

-
- - - - -
-
- - - Country 1 - Country 2 - Country 3 - - - - - - Language 1 - Language 2 - Language 3 - - - -
- - - -

Profile

-

- People here will get to know you with this information -

-
- - - - - - - - -
-
- - - www.example.com/ - -
-
- - - - -
- - - -

Notifications

-

- We'll always let you know about important changes, but you pick what else you want to hear about. -

-
-
- By Email -
- - Company News - - - Featured Products - - - Messages - -
-
-
- Push Notifications - - - Everything - - - Just the good stuff - - - No push notifications - - -
-
- -
- - -
-
- - - -
-

Sectioned form with dividers #2

-

- This sectioned form example uses dividers to separate the different sections of the form, section title and description is horizontally aligned with the section - fields. Form fields uses mat-label to have separate labels as well as placeholders for hints. -

-
- -
-
-
-

Basic information

-

- Set your login preferences, help us personalize your experience and make big account changes here -

-
-
-
- - Email Address - - - -
-
- - Country / Region - - Country 1 - Country 2 - Country 3 - - - -
-
- - Language - - Language 1 - Language 2 - Language 3 - - - -
-
-
- - - -
-
-

Profile

-

- People here will get to know you with this information -

-
-
-
- - First name - - - -
-
- - Last name - - - -
-
- - Username - - www.example.com/ - -
-
- - About - - - -
-
-
- - - -
-
-

Notifications

-

- We'll always let you know about important changes, but you pick what else you want to hear about. -

-
-
-
- By Email -
- - Company News - - - Featured Products - - - Messages - -
-
-
- Push Notifications - - - Everything - - - Just the good stuff - - - No push notifications - - -
-
-
- -
- - -
-
- - - -
-

Sectioned form with dividers #3

-

- This sectioned form example uses dividers and colors to separate the different sections of the form. Form fields have labels and dense style. -

-
- -
-
-

Basic information

-

Set your login preferences, help us personalize your experience and make big account changes here

-
-
- - Email Address - - - - Country / Region - - Country 1 - Country 2 - Country 3 - - - - Language - - Language 1 - Language 2 - Language 3 - - -
- -
-

Profile

-

People here will get to know you with this information

-
-
- - First name - - - - Last name - - - - Username - - www.example.com/ - - - About - - -
- -
-

Notifications

-

We'll always let you know about important changes, but you pick what else you want to hear about.

-
-
-
- By Email -
- - Company News - - - Featured Products - - - Messages - -
-
-
- Push Notifications - - - Everything - - - Just the good stuff - - - No push notifications - - -
-
- -
- - -
-
- - - -
-

Sectioned form with separate cards

-

- This sectioned form example uses cards to separate the sections of the form. This kind of form layouts are more suitable for Settings or similar pages. -

-
- -
- -
-

Basic information

-

- Set your login preferences, help us personalize your experience and make big account changes here -

- -
- - - - -
-
- - - Country 1 - Country 2 - Country 3 - - - - - - Language 1 - Language 2 - Language 3 - - - -
-
- -
-

Profile

-

- People here will get to know you with this information -

- -
- - - - - - - - -
-
- - - www.example.com/ - -
-
- - - - -
-
- -
-

Notifications

-

- We'll always let you know about important changes, but you pick what else you want to hear about. -

- -
-
- By Email -
- - Company News - - - Featured Products - - - Messages - -
-
-
- Push Notifications - - - Everything - - - Just the good stuff - - - No push notifications - - -
-
-
- -
- - -
- -
- - -
-

Sectioned form with separate cards #2

-

- This sectioned form example uses cards and whitespace to separate the different sections of the form, section title and description is horizontally aligned with - the section fields. Form fields have labels and dense style. -

-
- -
-
-
-

Basic information

-

- Set your login preferences, help us personalize your experience and make big account changes here -

-
-
- - Email Address - - - - Country / Region - - Country 1 - Country 2 - Country 3 - - - - Language - - Language 1 - Language 2 - Language 3 - - -
-
- -
-
-

Profile

-

- People here will get to know you with this information -

-
-
- - First name - - - - Last name - - - - Username - - www.example.com/ - - - About - - -
-
- -
-
-

Notifications

-

- We'll always let you know about important changes, but you pick what else you want to hear about. -

-
-
-
- By Email -
- - Company News - - - Featured Products - - - Messages - -
-
-
- Push Notifications - - - Everything - - - Just the good stuff - - - No push notifications - - -
-
-
- -
- - -
-
- - -
-

Sectioned form with separate cards #3

-

- This sectioned form example uses cards and whitespace to separate the different sections of the form, section title and description is horizontally aligned with - the section fields. Form fields have separate labels and dense style. -

-
- -
-
-
-

Basic information

-

Set your login preferences, help us personalize your experience and make big account changes here

-
- -
-
- Email Address - - - -
-
- Country / Region - - - Country 1 - Country 2 - Country 3 - - -
-
- Language - - - Language 1 - Language 2 - Language 3 - - -
-
-
- -
-
-

Profile

-

People here will get to know you with this information

-
- -
-
- First name - - - -
-
- Last name - - - -
-
- Username - - - www.example.com/ - -
-
- About - - - -
-
-
- -
-
-

Notifications

-

We'll always let you know about important changes, but you pick what else you want to hear about.

-
- -
-
- By Email -
- - Company News - - - Featured Products - - - Messages - -
-
-
- Push Notifications - - - Everything - - - Just the good stuff - - - No push notifications - - -
-
-
- -
- - -
-
- -
- -
-
- diff --git a/src/app/modules/admin/ui/forms/layouts/layouts.component.ts b/src/app/modules/admin/ui/forms/layouts/layouts.component.ts deleted file mode 100644 index 31b06388..00000000 --- a/src/app/modules/admin/ui/forms/layouts/layouts.component.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; - -@Component({ - selector : 'forms-layouts', - templateUrl : './layouts.component.html', - encapsulation: ViewEncapsulation.None -}) -export class FormsLayoutsComponent -{ - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/ui/forms/layouts/layouts.module.ts b/src/app/modules/admin/ui/forms/layouts/layouts.module.ts deleted file mode 100644 index 13a7e8e9..00000000 --- a/src/app/modules/admin/ui/forms/layouts/layouts.module.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { NgModule } from '@angular/core'; -import { Route, RouterModule } from '@angular/router'; -import { MatButtonModule } from '@angular/material/button'; -import { MatCheckboxModule } from '@angular/material/checkbox'; -import { MatDividerModule } from '@angular/material/divider'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatIconModule } from '@angular/material/icon'; -import { MatInputModule } from '@angular/material/input'; -import { MatMenuModule } from '@angular/material/menu'; -import { MatRadioModule } from '@angular/material/radio'; -import { MatSelectModule } from '@angular/material/select'; -import { SharedModule } from 'app/shared/shared.module'; -import { FormsLayoutsComponent } from 'app/modules/admin/ui/forms/layouts/layouts.component'; - -export const routes: Route[] = [ - { - path : '', - component: FormsLayoutsComponent - } -]; - -@NgModule({ - declarations: [ - FormsLayoutsComponent - ], - imports : [ - RouterModule.forChild(routes), - MatButtonModule, - MatCheckboxModule, - MatDividerModule, - MatFormFieldModule, - MatIconModule, - MatInputModule, - MatMenuModule, - MatRadioModule, - MatSelectModule, - SharedModule - ] -}) -export class FormsLayoutsModule -{ -} diff --git a/src/app/modules/admin/ui/forms/wizards/wizards.component.html b/src/app/modules/admin/ui/forms/wizards/wizards.component.html deleted file mode 100644 index c10ac046..00000000 --- a/src/app/modules/admin/ui/forms/wizards/wizards.component.html +++ /dev/null @@ -1,554 +0,0 @@ -
- - -
-
- -
- -
- - Forms -
-
- -
-

- Form Wizards -

-
-
-
- - -
- -
- -
-

- Form wizard examples in this page uses mat-horizontal-stepper and mat-vertical-stepper components from Angular Material. You can get - more information about them over here: - https://material.angular.io/components/stepper/overview - - . -

-

- We prepared couple examples to get you started. You are not limited with these examples, there are lots of options to steppers and you can configure them to - have different behaviors. Take a look at the official guide to learn more about them. -

-
- - -
Horizontal Stepper
- -
- - - Basic information -

- Fill in your basic information to let us know your preferences -

-
- - - - -
-
- - - Country 1 - Country 2 - Country 3 - - - - - - Language 1 - Language 2 - Language 3 - - - -
-
- -
-
- - - Profile -

- People here will get to know you with this information -

-
- - - - - - - - -
-
- - - www.example.com/ - -
-
- - - - -
-
- - -
-
- - - Notifications -

- We'll always let you know about important changes, but you pick what else you want to hear about. -

-
-
- By Email -
- - Company News - - - Featured Products - - - Messages - -
-
-
- Push Notifications - - - Everything - - - Just the good stuff - - - No push notifications - - -
-
-
- - -
-
- - - Done -

- Thank you for completing our form! You can reset the form if you would like to change your information. -

-
- - -
-
-
-
- - -
Vertical Stepper
- -
- - - Basic information -

- Fill in your basic information to let us know your preferences -

-
- - - - -
-
- - - Country 1 - Country 2 - Country 3 - - - - - - Language 1 - Language 2 - Language 3 - - - -
-
- -
-
- - - Profile -

- People here will get to know you with this information -

-
- - - - - - - - -
-
- - - www.example.com/ - -
-
- - - - -
-
- - -
-
- - - Notifications -

- We'll always let you know about important changes, but you pick what else you want to hear about. -

-
-
- By Email -
- - Company News - - - Featured Products - - - Messages - -
-
-
- Push Notifications - - - Everything - - - Just the good stuff - - - No push notifications - - -
-
-
- - -
-
- - - Done -

- Thank you for completing our form! You can reset the form if you would like to change your information. -

-
- - -
-
-
-
- -
- -
- -
diff --git a/src/app/modules/admin/ui/forms/wizards/wizards.component.ts b/src/app/modules/admin/ui/forms/wizards/wizards.component.ts deleted file mode 100644 index af5de26f..00000000 --- a/src/app/modules/admin/ui/forms/wizards/wizards.component.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { Component, OnInit, ViewEncapsulation } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; - -@Component({ - selector : 'forms-wizards', - templateUrl : './wizards.component.html', - encapsulation: ViewEncapsulation.None -}) -export class FormsWizardsComponent implements OnInit -{ - horizontalStepperForm: FormGroup; - verticalStepperForm: FormGroup; - - /** - * Constructor - */ - constructor(private _formBuilder: FormBuilder) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Horizontal stepper form - this.horizontalStepperForm = this._formBuilder.group({ - step1: this._formBuilder.group({ - email : ['', [Validators.required, Validators.email]], - country : ['', Validators.required], - language: ['', Validators.required] - }), - step2: this._formBuilder.group({ - firstName: ['', Validators.required], - lastName : ['', Validators.required], - userName : ['', Validators.required], - about : [''] - }), - step3: this._formBuilder.group({ - byEmail : this._formBuilder.group({ - companyNews : [true], - featuredProducts: [false], - messages : [true] - }), - pushNotifications: ['everything', Validators.required] - }) - }); - - // Vertical stepper form - this.verticalStepperForm = this._formBuilder.group({ - step1: this._formBuilder.group({ - email : ['', [Validators.required, Validators.email]], - country : ['', Validators.required], - language: ['', Validators.required] - }), - step2: this._formBuilder.group({ - firstName: ['', Validators.required], - lastName : ['', Validators.required], - userName : ['', Validators.required], - about : [''] - }), - step3: this._formBuilder.group({ - byEmail : this._formBuilder.group({ - companyNews : [true], - featuredProducts: [false], - messages : [true] - }), - pushNotifications: ['everything', Validators.required] - }) - }); - } -} diff --git a/src/app/modules/admin/ui/forms/wizards/wizards.module.ts b/src/app/modules/admin/ui/forms/wizards/wizards.module.ts deleted file mode 100644 index 5f4f0da7..00000000 --- a/src/app/modules/admin/ui/forms/wizards/wizards.module.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { NgModule } from '@angular/core'; -import { Route, RouterModule } from '@angular/router'; -import { MatButtonModule } from '@angular/material/button'; -import { MatCheckboxModule } from '@angular/material/checkbox'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatIconModule } from '@angular/material/icon'; -import { MatInputModule } from '@angular/material/input'; -import { MatRadioModule } from '@angular/material/radio'; -import { MatSelectModule } from '@angular/material/select'; -import { MatStepperModule } from '@angular/material/stepper'; -import { SharedModule } from 'app/shared/shared.module'; -import { FormsWizardsComponent } from 'app/modules/admin/ui/forms/wizards/wizards.component'; - -export const routes: Route[] = [ - { - path : '', - component: FormsWizardsComponent - } -]; - -@NgModule({ - declarations: [ - FormsWizardsComponent - ], - imports : [ - RouterModule.forChild(routes), - MatButtonModule, - MatCheckboxModule, - MatFormFieldModule, - MatIconModule, - MatInputModule, - MatRadioModule, - MatSelectModule, - MatStepperModule, - SharedModule - ] -}) -export class FormsWizardsModule -{ -} diff --git a/src/app/modules/admin/ui/icons/icons.component.html b/src/app/modules/admin/ui/icons/icons.component.html deleted file mode 100644 index 242d0005..00000000 --- a/src/app/modules/admin/ui/icons/icons.component.html +++ /dev/null @@ -1,96 +0,0 @@ -
- - -
-
- -
- -
- - Icons -
-
- -
-

- -

{{icons.name}}

-
-

-
-
-
- - -
- -
- -

Usage

- - - - -

Icons

-
- - Search an icon - - - - Icon size - - 16 - 20 - 24 - 32 - 40 - 48 - 64 - - -
- -
- - - - - -
- -
- -
- -
{{icon}}
- -
- -
- -
- -
- -
- -
- -
diff --git a/src/app/modules/admin/ui/icons/icons.component.ts b/src/app/modules/admin/ui/icons/icons.component.ts deleted file mode 100644 index 283dd31e..00000000 --- a/src/app/modules/admin/ui/icons/icons.component.ts +++ /dev/null @@ -1,128 +0,0 @@ -import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { BehaviorSubject, combineLatest, Observable, Subject } from 'rxjs'; -import { map, takeUntil } from 'rxjs/operators'; -import { IconsService } from 'app/modules/admin/ui/icons/icons.service'; -import { Icon } from 'app/modules/admin/ui/icons/icons.types'; - -@Component({ - selector : 'icons', - templateUrl : './icons.component.html', - encapsulation: ViewEncapsulation.None -}) -export class IconsComponent implements OnInit, OnDestroy -{ - icons$: Observable; - filteredIcons$: Observable; - filterValue$: BehaviorSubject = new BehaviorSubject(''); - - iconSize: number = 24; - selectedIcon: string[]; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor(private _iconsService: IconsService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Get the icons - this.icons$ = this._iconsService.icons; - - // Subscribe to icons - this._iconsService.icons - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe((icons) => { - - // Set the icon size in case the icon set - // has a special base grid size - this.iconSize = icons.grid; - - // Select the first icon - this.selectedIcon = [icons.namespace, icons.list[0]]; - }); - - // Create filtered icons - this.filteredIcons$ = combineLatest([this.icons$, this.filterValue$]) - .pipe( - map(([icons, filterValue]) => { - - // Filter the icons - const filteredIcons = icons.list.filter(icon => icon.toLowerCase().includes(filterValue.toLowerCase())); - - // Update the list with the filtered icons - return { - ...icons, - list: filteredIcons - }; - }) - ); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Filter icons - * - * @param event - */ - filterIcons(event: any): void - { - // Push the value to the observable - this.filterValue$.next(event.target.value); - } - - /** - * Select an icon - * - * @param namespace - * @param icon - */ - selectIcon(namespace: string, icon: string): void - { - this.selectedIcon = [ - namespace, - icon - ]; - } - - /** - * Returns the selected icon's svgIcon - * to use in mat-icon component - */ - calcSvgIconAttr(): string - { - if ( !this.selectedIcon ) - { - return ''; - } - - if ( this.selectedIcon[0] === '' ) - { - return this.selectedIcon[1]; - } - - return this.selectedIcon.join(':'); - } -} diff --git a/src/app/modules/admin/ui/icons/icons.module.ts b/src/app/modules/admin/ui/icons/icons.module.ts deleted file mode 100644 index c9272d2c..00000000 --- a/src/app/modules/admin/ui/icons/icons.module.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { NgModule } from '@angular/core'; -import { ReactiveFormsModule } from '@angular/forms'; -import { Route, RouterModule } from '@angular/router'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatIconModule } from '@angular/material/icon'; -import { MatInputModule } from '@angular/material/input'; -import { MatSelectModule } from '@angular/material/select'; -import { FuseHighlightModule } from '@fuse/components/highlight'; -import { SharedModule } from 'app/shared/shared.module'; -import { IconsComponent } from 'app/modules/admin/ui/icons/icons.component'; -import { IconsResolver } from 'app/modules/admin/ui/icons/icons.resolvers'; - -export const routes: Route[] = [ - { - // Redirect /icons to /icons/material-twotone - path : '', - pathMatch : 'full', - redirectTo: 'material-twotone' - }, - { - path : '', - component: IconsComponent, - children : [ - { - path : '**', - resolve: { - icons: IconsResolver - } - } - ] - } -]; - -@NgModule({ - declarations: [ - IconsComponent - ], - imports : [ - ReactiveFormsModule, - RouterModule.forChild(routes), - MatFormFieldModule, - MatIconModule, - MatInputModule, - MatSelectModule, - FuseHighlightModule, - SharedModule - ] -}) -export class IconsModule -{ -} diff --git a/src/app/modules/admin/ui/icons/icons.resolvers.ts b/src/app/modules/admin/ui/icons/icons.resolvers.ts deleted file mode 100644 index 5038ff59..00000000 --- a/src/app/modules/admin/ui/icons/icons.resolvers.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { Injectable } from '@angular/core'; -import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router'; -import { Observable } from 'rxjs'; -import { IconsService } from 'app/modules/admin/ui/icons/icons.service'; - -@Injectable({ - providedIn: 'root' -}) -export class IconsResolver implements Resolve -{ - /** - * Constructor - */ - constructor(private _iconsService: IconsService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Resolve - * - * @param route - * @param state - */ - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable - { - return this._iconsService.getIcons(state.url); - } -} diff --git a/src/app/modules/admin/ui/icons/icons.service.ts b/src/app/modules/admin/ui/icons/icons.service.ts deleted file mode 100644 index 4112d3e1..00000000 --- a/src/app/modules/admin/ui/icons/icons.service.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient } from '@angular/common/http'; -import { BehaviorSubject, Observable } from 'rxjs'; -import { tap } from 'rxjs/operators'; - -@Injectable({ - providedIn: 'root' -}) -export class IconsService -{ - // Private - private _icons: BehaviorSubject = new BehaviorSubject(null); - - /** - * Constructor - */ - constructor(private _httpClient: HttpClient) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Accessors - // ----------------------------------------------------------------------------------------------------- - - /** - * Getter for icons - */ - get icons(): Observable - { - return this._icons.asObservable(); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Get icons - * - * @param url - */ - getIcons(url: string): Observable - { - // Prepend the url with 'api' - url = 'api' + url; - - return this._httpClient.get(url).pipe( - tap((response: any) => { - this._icons.next(response); - }) - ); - } -} diff --git a/src/app/modules/admin/ui/icons/icons.types.ts b/src/app/modules/admin/ui/icons/icons.types.ts deleted file mode 100644 index 25be8aea..00000000 --- a/src/app/modules/admin/ui/icons/icons.types.ts +++ /dev/null @@ -1,7 +0,0 @@ -export interface Icon -{ - namespace: string; - name: string; - grid: number; - list: string[]; -} diff --git a/src/app/modules/admin/ui/page-layouts/carded/fullwidth/content-scroll/fullwidth.component.html b/src/app/modules/admin/ui/page-layouts/carded/fullwidth/content-scroll/fullwidth.component.html deleted file mode 100644 index 91ea1d37..00000000 --- a/src/app/modules/admin/ui/page-layouts/carded/fullwidth/content-scroll/fullwidth.component.html +++ /dev/null @@ -1,73 +0,0 @@ -
- - -
-
- -
- - -
- -
-

- Page heading -

-
-
- -
- - -
-
- - -
- - -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/carded/fullwidth/content-scroll/fullwidth.component.ts b/src/app/modules/admin/ui/page-layouts/carded/fullwidth/content-scroll/fullwidth.component.ts deleted file mode 100644 index d55fcd6c..00000000 --- a/src/app/modules/admin/ui/page-layouts/carded/fullwidth/content-scroll/fullwidth.component.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; - -@Component({ - selector : 'carded-fullwidth-content-scroll', - templateUrl : './fullwidth.component.html', - encapsulation: ViewEncapsulation.None -}) -export class CardedFullwidthContentScrollComponent -{ - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/ui/page-layouts/carded/fullwidth/normal-scroll/fullwidth.component.html b/src/app/modules/admin/ui/page-layouts/carded/fullwidth/normal-scroll/fullwidth.component.html deleted file mode 100644 index 9da9b8cc..00000000 --- a/src/app/modules/admin/ui/page-layouts/carded/fullwidth/normal-scroll/fullwidth.component.html +++ /dev/null @@ -1,71 +0,0 @@ -
- - -
-
- -
- - -
- -
-

- Page heading -

-
-
- -
- - -
-
- - -
- - -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/carded/fullwidth/normal-scroll/fullwidth.component.ts b/src/app/modules/admin/ui/page-layouts/carded/fullwidth/normal-scroll/fullwidth.component.ts deleted file mode 100644 index 88378183..00000000 --- a/src/app/modules/admin/ui/page-layouts/carded/fullwidth/normal-scroll/fullwidth.component.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; - -@Component({ - selector : 'carded-fullwidth-normal-scroll', - templateUrl : './fullwidth.component.html', - encapsulation: ViewEncapsulation.None -}) -export class CardedFullwidthNormalScrollComponent -{ - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/ui/page-layouts/carded/fullwidth/page-scroll/fullwidth.component.html b/src/app/modules/admin/ui/page-layouts/carded/fullwidth/page-scroll/fullwidth.component.html deleted file mode 100644 index a031bb4d..00000000 --- a/src/app/modules/admin/ui/page-layouts/carded/fullwidth/page-scroll/fullwidth.component.html +++ /dev/null @@ -1,73 +0,0 @@ -
- - -
-
- -
- - -
- -
-

- Page heading -

-
-
- -
- - -
-
- - -
- - -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/carded/fullwidth/page-scroll/fullwidth.component.ts b/src/app/modules/admin/ui/page-layouts/carded/fullwidth/page-scroll/fullwidth.component.ts deleted file mode 100644 index d5ddc0b7..00000000 --- a/src/app/modules/admin/ui/page-layouts/carded/fullwidth/page-scroll/fullwidth.component.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; - -@Component({ - selector : 'carded-fullwidth-page-scroll', - templateUrl : './fullwidth.component.html', - encapsulation: ViewEncapsulation.None -}) -export class CardedFullwidthPageScrollComponent -{ - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/ui/page-layouts/carded/left-sidebar-1/content-scroll/left-sidebar-1.component.html b/src/app/modules/admin/ui/page-layouts/carded/left-sidebar-1/content-scroll/left-sidebar-1.component.html deleted file mode 100644 index 5b43ace6..00000000 --- a/src/app/modules/admin/ui/page-layouts/carded/left-sidebar-1/content-scroll/left-sidebar-1.component.html +++ /dev/null @@ -1,82 +0,0 @@ -
- - - - - - - - - - - - - -
-
- -
- - -
- -
-

- Page heading -

-
-
- -
- -
-
- - -
- - -
- -
- -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/carded/left-sidebar-1/content-scroll/left-sidebar-1.component.ts b/src/app/modules/admin/ui/page-layouts/carded/left-sidebar-1/content-scroll/left-sidebar-1.component.ts deleted file mode 100644 index 91883fcb..00000000 --- a/src/app/modules/admin/ui/page-layouts/carded/left-sidebar-1/content-scroll/left-sidebar-1.component.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; - -@Component({ - selector : 'carded-left-sidebar-1-content-scroll', - templateUrl : './left-sidebar-1.component.html', - encapsulation: ViewEncapsulation.None -}) -export class CardedLeftSidebar1ContentScrollComponent -{ - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/ui/page-layouts/carded/left-sidebar-1/normal-scroll/left-sidebar-1.component.html b/src/app/modules/admin/ui/page-layouts/carded/left-sidebar-1/normal-scroll/left-sidebar-1.component.html deleted file mode 100644 index 0a11aca4..00000000 --- a/src/app/modules/admin/ui/page-layouts/carded/left-sidebar-1/normal-scroll/left-sidebar-1.component.html +++ /dev/null @@ -1,80 +0,0 @@ -
- - - - - - - - - - - - - -
-
- -
- - -
- -
-

- Page heading -

-
-
- -
- -
-
- - -
- - -
- -
- -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/carded/left-sidebar-1/normal-scroll/left-sidebar-1.component.ts b/src/app/modules/admin/ui/page-layouts/carded/left-sidebar-1/normal-scroll/left-sidebar-1.component.ts deleted file mode 100644 index 21c3b592..00000000 --- a/src/app/modules/admin/ui/page-layouts/carded/left-sidebar-1/normal-scroll/left-sidebar-1.component.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; - -@Component({ - selector : 'carded-left-sidebar-1-normal-scroll', - templateUrl : './left-sidebar-1.component.html', - encapsulation: ViewEncapsulation.None -}) -export class CardedLeftSidebar1NormalScrollComponent -{ - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/ui/page-layouts/carded/left-sidebar-1/page-scroll/left-sidebar-1.component.html b/src/app/modules/admin/ui/page-layouts/carded/left-sidebar-1/page-scroll/left-sidebar-1.component.html deleted file mode 100644 index 77f80273..00000000 --- a/src/app/modules/admin/ui/page-layouts/carded/left-sidebar-1/page-scroll/left-sidebar-1.component.html +++ /dev/null @@ -1,82 +0,0 @@ -
- - - - - - - - - - - - - -
-
- -
- - -
- -
-

- Page heading -

-
-
- -
- -
-
- - -
- - -
- -
- -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/carded/left-sidebar-1/page-scroll/left-sidebar-1.component.ts b/src/app/modules/admin/ui/page-layouts/carded/left-sidebar-1/page-scroll/left-sidebar-1.component.ts deleted file mode 100644 index 2ba0cd81..00000000 --- a/src/app/modules/admin/ui/page-layouts/carded/left-sidebar-1/page-scroll/left-sidebar-1.component.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; - -@Component({ - selector : 'carded-left-sidebar-1-page-scroll', - templateUrl : './left-sidebar-1.component.html', - encapsulation: ViewEncapsulation.None -}) -export class CardedLeftSidebar1PageScrollComponent -{ - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/ui/page-layouts/carded/left-sidebar-2/content-scroll/left-sidebar-2.component.html b/src/app/modules/admin/ui/page-layouts/carded/left-sidebar-2/content-scroll/left-sidebar-2.component.html deleted file mode 100644 index 20721bdf..00000000 --- a/src/app/modules/admin/ui/page-layouts/carded/left-sidebar-2/content-scroll/left-sidebar-2.component.html +++ /dev/null @@ -1,83 +0,0 @@ -
- - -
-
- -
- - -
- -
-

- Page heading -

-
-
- -
- -
-
- - - - - - - - - - - - - -
- - -
- -
- -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/carded/left-sidebar-2/content-scroll/left-sidebar-2.component.ts b/src/app/modules/admin/ui/page-layouts/carded/left-sidebar-2/content-scroll/left-sidebar-2.component.ts deleted file mode 100644 index 8e3e2ec7..00000000 --- a/src/app/modules/admin/ui/page-layouts/carded/left-sidebar-2/content-scroll/left-sidebar-2.component.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { takeUntil } from 'rxjs/operators'; -import { Subject } from 'rxjs'; -import { FuseMediaWatcherService } from '@fuse/services/media-watcher'; - -@Component({ - selector : 'carded-left-sidebar-2-content-scroll', - templateUrl : './left-sidebar-2.component.html', - encapsulation: ViewEncapsulation.None -}) -export class CardedLeftSidebar2ContentScrollComponent implements OnInit, OnDestroy -{ - drawerMode: 'over' | 'side' = 'side'; - drawerOpened: boolean = true; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor(private _fuseMediaWatcherService: FuseMediaWatcherService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Subscribe to media changes - this._fuseMediaWatcherService.onMediaChange$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe(({matchingAliases}) => { - - // Set the drawerMode and drawerOpened if - if ( matchingAliases.includes('lg') ) - { - this.drawerMode = 'side'; - this.drawerOpened = true; - } - else - { - this.drawerMode = 'over'; - this.drawerOpened = false; - } - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } -} diff --git a/src/app/modules/admin/ui/page-layouts/carded/left-sidebar-2/normal-scroll/left-sidebar-2.component.html b/src/app/modules/admin/ui/page-layouts/carded/left-sidebar-2/normal-scroll/left-sidebar-2.component.html deleted file mode 100644 index 511e26f6..00000000 --- a/src/app/modules/admin/ui/page-layouts/carded/left-sidebar-2/normal-scroll/left-sidebar-2.component.html +++ /dev/null @@ -1,81 +0,0 @@ -
- - -
-
- -
- - -
- -
-

- Page heading -

-
-
- -
- -
-
- - - - - - - - - - - - - -
- - -
- -
- -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/carded/left-sidebar-2/normal-scroll/left-sidebar-2.component.ts b/src/app/modules/admin/ui/page-layouts/carded/left-sidebar-2/normal-scroll/left-sidebar-2.component.ts deleted file mode 100644 index acb6517e..00000000 --- a/src/app/modules/admin/ui/page-layouts/carded/left-sidebar-2/normal-scroll/left-sidebar-2.component.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import { FuseMediaWatcherService } from '@fuse/services/media-watcher'; - -@Component({ - selector : 'carded-left-sidebar-2-normal-scroll', - templateUrl : './left-sidebar-2.component.html', - encapsulation: ViewEncapsulation.None -}) -export class CardedLeftSidebar2NormalScrollComponent implements OnInit, OnDestroy -{ - drawerMode: 'over' | 'side' = 'side'; - drawerOpened: boolean = true; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor(private _fuseMediaWatcherService: FuseMediaWatcherService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Subscribe to media changes - this._fuseMediaWatcherService.onMediaChange$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe(({matchingAliases}) => { - - // Set the drawerMode and drawerOpened if - if ( matchingAliases.includes('lg') ) - { - this.drawerMode = 'side'; - this.drawerOpened = true; - } - else - { - this.drawerMode = 'over'; - this.drawerOpened = false; - } - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } -} diff --git a/src/app/modules/admin/ui/page-layouts/carded/left-sidebar-2/page-scroll/left-sidebar-2.component.html b/src/app/modules/admin/ui/page-layouts/carded/left-sidebar-2/page-scroll/left-sidebar-2.component.html deleted file mode 100644 index 4195d993..00000000 --- a/src/app/modules/admin/ui/page-layouts/carded/left-sidebar-2/page-scroll/left-sidebar-2.component.html +++ /dev/null @@ -1,83 +0,0 @@ -
- - -
-
- -
- - -
- -
-

- Page heading -

-
-
- -
- -
-
- - - - - - - - - - - - - -
- - -
- -
- -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/carded/left-sidebar-2/page-scroll/left-sidebar-2.component.ts b/src/app/modules/admin/ui/page-layouts/carded/left-sidebar-2/page-scroll/left-sidebar-2.component.ts deleted file mode 100644 index 1c31082a..00000000 --- a/src/app/modules/admin/ui/page-layouts/carded/left-sidebar-2/page-scroll/left-sidebar-2.component.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { takeUntil } from 'rxjs/operators'; -import { Subject } from 'rxjs'; -import { FuseMediaWatcherService } from '@fuse/services/media-watcher'; - -@Component({ - selector : 'carded-left-sidebar-2-page-scroll', - templateUrl : './left-sidebar-2.component.html', - encapsulation: ViewEncapsulation.None -}) -export class CardedLeftSidebar2PageScrollComponent implements OnInit, OnDestroy -{ - drawerMode: 'over' | 'side' = 'side'; - drawerOpened: boolean = true; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor(private _fuseMediaWatcherService: FuseMediaWatcherService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Subscribe to media changes - this._fuseMediaWatcherService.onMediaChange$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe(({matchingAliases}) => { - - // Set the drawerMode and drawerOpened if - if ( matchingAliases.includes('lg') ) - { - this.drawerMode = 'side'; - this.drawerOpened = true; - } - else - { - this.drawerMode = 'over'; - this.drawerOpened = false; - } - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } -} diff --git a/src/app/modules/admin/ui/page-layouts/carded/right-sidebar-1/content-scroll/right-sidebar-1.component.html b/src/app/modules/admin/ui/page-layouts/carded/right-sidebar-1/content-scroll/right-sidebar-1.component.html deleted file mode 100644 index b56cf90c..00000000 --- a/src/app/modules/admin/ui/page-layouts/carded/right-sidebar-1/content-scroll/right-sidebar-1.component.html +++ /dev/null @@ -1,83 +0,0 @@ -
- - - - - - - - - - - - - -
-
- -
- - -
- -
-

- Page heading -

-
-
- -
- -
-
- - -
- - -
- -
- -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/carded/right-sidebar-1/content-scroll/right-sidebar-1.component.ts b/src/app/modules/admin/ui/page-layouts/carded/right-sidebar-1/content-scroll/right-sidebar-1.component.ts deleted file mode 100644 index a160ce05..00000000 --- a/src/app/modules/admin/ui/page-layouts/carded/right-sidebar-1/content-scroll/right-sidebar-1.component.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; - -@Component({ - selector : 'carded-right-sidebar-1-content-scroll', - templateUrl : './right-sidebar-1.component.html', - encapsulation: ViewEncapsulation.None -}) -export class CardedRightSidebar1ContentScrollComponent -{ - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/ui/page-layouts/carded/right-sidebar-1/normal-scroll/right-sidebar-1.component.html b/src/app/modules/admin/ui/page-layouts/carded/right-sidebar-1/normal-scroll/right-sidebar-1.component.html deleted file mode 100644 index f5bcf43a..00000000 --- a/src/app/modules/admin/ui/page-layouts/carded/right-sidebar-1/normal-scroll/right-sidebar-1.component.html +++ /dev/null @@ -1,81 +0,0 @@ -
- - - - - - - - - - - - - -
-
- -
- - -
- -
-

- Page heading -

-
-
- -
- -
-
- - -
- - -
- -
- -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/carded/right-sidebar-1/normal-scroll/right-sidebar-1.component.ts b/src/app/modules/admin/ui/page-layouts/carded/right-sidebar-1/normal-scroll/right-sidebar-1.component.ts deleted file mode 100644 index 7ef99e95..00000000 --- a/src/app/modules/admin/ui/page-layouts/carded/right-sidebar-1/normal-scroll/right-sidebar-1.component.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; - -@Component({ - selector : 'carded-right-sidebar-1-normal-scroll', - templateUrl : './right-sidebar-1.component.html', - encapsulation: ViewEncapsulation.None -}) -export class CardedRightSidebar1NormalScrollComponent -{ - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/ui/page-layouts/carded/right-sidebar-1/page-scroll/right-sidebar-1.component.html b/src/app/modules/admin/ui/page-layouts/carded/right-sidebar-1/page-scroll/right-sidebar-1.component.html deleted file mode 100644 index 50bbd9f6..00000000 --- a/src/app/modules/admin/ui/page-layouts/carded/right-sidebar-1/page-scroll/right-sidebar-1.component.html +++ /dev/null @@ -1,83 +0,0 @@ -
- - - - - - - - - - - - - -
-
- -
- - -
- -
-

- Page heading -

-
-
- -
- -
-
- - -
- - -
- -
- -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/carded/right-sidebar-1/page-scroll/right-sidebar-1.component.ts b/src/app/modules/admin/ui/page-layouts/carded/right-sidebar-1/page-scroll/right-sidebar-1.component.ts deleted file mode 100644 index 920dcba8..00000000 --- a/src/app/modules/admin/ui/page-layouts/carded/right-sidebar-1/page-scroll/right-sidebar-1.component.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; - -@Component({ - selector : 'carded-right-sidebar-1-page-scroll', - templateUrl : './right-sidebar-1.component.html', - encapsulation: ViewEncapsulation.None -}) -export class CardedRightSidebar1PageScrollComponent -{ - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/ui/page-layouts/carded/right-sidebar-2/content-scroll/right-sidebar-2.component.html b/src/app/modules/admin/ui/page-layouts/carded/right-sidebar-2/content-scroll/right-sidebar-2.component.html deleted file mode 100644 index 92ba086e..00000000 --- a/src/app/modules/admin/ui/page-layouts/carded/right-sidebar-2/content-scroll/right-sidebar-2.component.html +++ /dev/null @@ -1,84 +0,0 @@ -
- - -
-
- -
- - -
- -
-

- Page heading -

-
-
- -
- -
-
- - - - - - - - - - - - - -
- - -
- -
- -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/carded/right-sidebar-2/content-scroll/right-sidebar-2.component.ts b/src/app/modules/admin/ui/page-layouts/carded/right-sidebar-2/content-scroll/right-sidebar-2.component.ts deleted file mode 100644 index e30c71e7..00000000 --- a/src/app/modules/admin/ui/page-layouts/carded/right-sidebar-2/content-scroll/right-sidebar-2.component.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { takeUntil } from 'rxjs/operators'; -import { Subject } from 'rxjs'; -import { FuseMediaWatcherService } from '@fuse/services/media-watcher'; - -@Component({ - selector : 'carded-right-sidebar-2-content-scroll', - templateUrl : './right-sidebar-2.component.html', - encapsulation: ViewEncapsulation.None -}) -export class CardedRightSidebar2ContentScrollComponent implements OnInit, OnDestroy -{ - drawerMode: 'over' | 'side' = 'side'; - drawerOpened: boolean = true; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor(private _fuseMediaWatcherService: FuseMediaWatcherService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Subscribe to media changes - this._fuseMediaWatcherService.onMediaChange$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe(({matchingAliases}) => { - - // Set the drawerMode and drawerOpened if - if ( matchingAliases.includes('lg') ) - { - this.drawerMode = 'side'; - this.drawerOpened = true; - } - else - { - this.drawerMode = 'over'; - this.drawerOpened = false; - } - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } -} diff --git a/src/app/modules/admin/ui/page-layouts/carded/right-sidebar-2/normal-scroll/right-sidebar-2.component.html b/src/app/modules/admin/ui/page-layouts/carded/right-sidebar-2/normal-scroll/right-sidebar-2.component.html deleted file mode 100644 index 2ee4bf4d..00000000 --- a/src/app/modules/admin/ui/page-layouts/carded/right-sidebar-2/normal-scroll/right-sidebar-2.component.html +++ /dev/null @@ -1,82 +0,0 @@ -
- - -
-
- -
- - -
- -
-

- Page heading -

-
-
- -
- -
-
- - - - - - - - - - - - - -
- - -
- -
- -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/carded/right-sidebar-2/normal-scroll/right-sidebar-2.component.ts b/src/app/modules/admin/ui/page-layouts/carded/right-sidebar-2/normal-scroll/right-sidebar-2.component.ts deleted file mode 100644 index 36dd0f8a..00000000 --- a/src/app/modules/admin/ui/page-layouts/carded/right-sidebar-2/normal-scroll/right-sidebar-2.component.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import { FuseMediaWatcherService } from '@fuse/services/media-watcher'; - -@Component({ - selector : 'carded-right-sidebar-2-normal-scroll', - templateUrl : './right-sidebar-2.component.html', - encapsulation: ViewEncapsulation.None -}) -export class CardedRightSidebar2NormalScrollComponent implements OnInit, OnDestroy -{ - drawerMode: 'over' | 'side' = 'side'; - drawerOpened: boolean = true; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor(private _fuseMediaWatcherService: FuseMediaWatcherService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Subscribe to media changes - this._fuseMediaWatcherService.onMediaChange$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe(({matchingAliases}) => { - - // Set the drawerMode and drawerOpened if - if ( matchingAliases.includes('lg') ) - { - this.drawerMode = 'side'; - this.drawerOpened = true; - } - else - { - this.drawerMode = 'over'; - this.drawerOpened = false; - } - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } -} diff --git a/src/app/modules/admin/ui/page-layouts/carded/right-sidebar-2/page-scroll/right-sidebar-2.component.html b/src/app/modules/admin/ui/page-layouts/carded/right-sidebar-2/page-scroll/right-sidebar-2.component.html deleted file mode 100644 index 017f8a41..00000000 --- a/src/app/modules/admin/ui/page-layouts/carded/right-sidebar-2/page-scroll/right-sidebar-2.component.html +++ /dev/null @@ -1,84 +0,0 @@ -
- - -
-
- -
- - -
- -
-

- Page heading -

-
-
- -
- -
-
- - - - - - - - - - - - - -
- - -
- -
- -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/carded/right-sidebar-2/page-scroll/right-sidebar-2.component.ts b/src/app/modules/admin/ui/page-layouts/carded/right-sidebar-2/page-scroll/right-sidebar-2.component.ts deleted file mode 100644 index 813a516a..00000000 --- a/src/app/modules/admin/ui/page-layouts/carded/right-sidebar-2/page-scroll/right-sidebar-2.component.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { takeUntil } from 'rxjs/operators'; -import { Subject } from 'rxjs'; -import { FuseMediaWatcherService } from '@fuse/services/media-watcher'; - -@Component({ - selector : 'carded-right-sidebar-2-page-scroll', - templateUrl : './right-sidebar-2.component.html', - encapsulation: ViewEncapsulation.None -}) -export class CardedRightSidebar2PageScrollComponent implements OnInit, OnDestroy -{ - drawerMode: 'over' | 'side' = 'side'; - drawerOpened: boolean = true; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor(private _fuseMediaWatcherService: FuseMediaWatcherService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Subscribe to media changes - this._fuseMediaWatcherService.onMediaChange$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe(({matchingAliases}) => { - - // Set the drawerMode and drawerOpened if - if ( matchingAliases.includes('lg') ) - { - this.drawerMode = 'side'; - this.drawerOpened = true; - } - else - { - this.drawerMode = 'over'; - this.drawerOpened = false; - } - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } -} diff --git a/src/app/modules/admin/ui/page-layouts/common/demo-placeholder/demo-placeholder.component.ts b/src/app/modules/admin/ui/page-layouts/common/demo-placeholder/demo-placeholder.component.ts deleted file mode 100644 index 4dd4f8dd..00000000 --- a/src/app/modules/admin/ui/page-layouts/common/demo-placeholder/demo-placeholder.component.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; - -@Component({ - selector : 'demo-placeholder', - template : ` -
- `, - encapsulation: ViewEncapsulation.None -}) -export class DemoPlaceholderComponent -{ - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/ui/page-layouts/common/demo-placeholder/demo-placeholder.module.ts b/src/app/modules/admin/ui/page-layouts/common/demo-placeholder/demo-placeholder.module.ts deleted file mode 100644 index 42373157..00000000 --- a/src/app/modules/admin/ui/page-layouts/common/demo-placeholder/demo-placeholder.module.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { NgModule } from '@angular/core'; -import { DemoPlaceholderComponent } from 'app/modules/admin/ui/page-layouts/common/demo-placeholder/demo-placeholder.component'; - -@NgModule({ - declarations: [ - DemoPlaceholderComponent - ], - exports : [ - DemoPlaceholderComponent - ] -}) -export class DemoPlaceholderModule -{ -} diff --git a/src/app/modules/admin/ui/page-layouts/common/demo-sidebar/demo-sidebar.component.ts b/src/app/modules/admin/ui/page-layouts/common/demo-sidebar/demo-sidebar.component.ts deleted file mode 100644 index 51b91e6f..00000000 --- a/src/app/modules/admin/ui/page-layouts/common/demo-sidebar/demo-sidebar.component.ts +++ /dev/null @@ -1,199 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; -import { FuseNavigationItem } from '@fuse/components/navigation/navigation.types'; - -@Component({ - selector : 'demo-sidebar', - template : ` -
- -
- -
- - -
Demo Sidebar
- - - -
-
- -
Storage
-
-
- 19.9 GB of 100 GB used - -
-
- - -
-
- -
Users
-
-
- 8 of 20 users used - -
-
-
- `, - styles : [ - ` - demo-sidebar fuse-vertical-navigation .fuse-vertical-navigation-wrapper { - box-shadow: none !important; - } - ` - ], - encapsulation: ViewEncapsulation.None -}) -export class DemoSidebarComponent -{ - menuData: FuseNavigationItem[]; - - /** - * Constructor - */ - constructor() - { - this.menuData = [ - { - title : 'Actions', - subtitle: 'Task, project & team', - type : 'group', - children: [ - { - title: 'Create task', - type : 'basic', - icon : 'heroicons_outline:plus-circle' - }, - { - title: 'Create team', - type : 'basic', - icon : 'heroicons_outline:user-group' - }, - { - title: 'Create project', - type : 'basic', - icon : 'heroicons_outline:briefcase' - }, - { - title: 'Create user', - type : 'basic', - icon : 'heroicons_outline:user-add' - }, - { - title : 'Assign user or team', - subtitle: 'Assign to a task or a project', - type : 'basic', - icon : 'heroicons_outline:badge-check' - } - ] - }, - { - title : 'Tasks', - type : 'group', - children: [ - { - title: 'All tasks', - type : 'basic', - icon : 'heroicons_outline:clipboard-list', - badge: { - title : '49', - classes: 'px-2 bg-primary text-on-primary rounded-full' - } - }, - { - title: 'Ongoing tasks', - type : 'basic', - icon : 'heroicons_outline:clipboard-copy' - }, - { - title: 'Completed tasks', - type : 'basic', - icon : 'heroicons_outline:clipboard-check' - }, - { - title: 'Abandoned tasks', - type : 'basic', - icon : 'heroicons_outline:clipboard' - }, - { - title: 'Assigned to me', - type : 'basic', - icon : 'heroicons_outline:user' - }, - { - title: 'Assigned to my team', - type : 'basic', - icon : 'heroicons_outline:users' - } - ] - }, - { - title : 'Settings', - type : 'group', - children: [ - { - title : 'General', - type : 'collapsable', - icon : 'heroicons_outline:cog', - children: [ - { - title: 'Tasks', - type : 'basic' - }, - { - title: 'Users', - type : 'basic' - }, - { - title: 'Teams', - type : 'basic' - } - ] - }, - { - title : 'Account', - type : 'collapsable', - icon : 'heroicons_outline:user-circle', - children: [ - { - title: 'Personal', - type : 'basic' - }, - { - title: 'Payment', - type : 'basic' - }, - { - title: 'Security', - type : 'basic' - } - ] - } - ] - }, - { - type: 'divider' - } - ]; - } -} diff --git a/src/app/modules/admin/ui/page-layouts/common/demo-sidebar/demo-sidebar.module.ts b/src/app/modules/admin/ui/page-layouts/common/demo-sidebar/demo-sidebar.module.ts deleted file mode 100644 index 66a457c6..00000000 --- a/src/app/modules/admin/ui/page-layouts/common/demo-sidebar/demo-sidebar.module.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { MatIconModule } from '@angular/material/icon'; -import { MatProgressBarModule } from '@angular/material/progress-bar'; -import { FuseNavigationModule } from '@fuse/components/navigation/navigation.module'; -import { DemoSidebarComponent } from 'app/modules/admin/ui/page-layouts/common/demo-sidebar/demo-sidebar.component'; - -@NgModule({ - declarations: [ - DemoSidebarComponent - ], - imports : [ - RouterModule.forChild([]), - MatIconModule, - MatProgressBarModule, - FuseNavigationModule - ], - exports : [ - DemoSidebarComponent - ] -}) -export class DemoSidebarModule -{ -} diff --git a/src/app/modules/admin/ui/page-layouts/common/layout-overview/layout-overview.component.ts b/src/app/modules/admin/ui/page-layouts/common/layout-overview/layout-overview.component.ts deleted file mode 100644 index 73d55d74..00000000 --- a/src/app/modules/admin/ui/page-layouts/common/layout-overview/layout-overview.component.ts +++ /dev/null @@ -1,136 +0,0 @@ -import { Component, OnInit, ViewEncapsulation } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; - -export interface PageLayoutsOverviewData -{ - title: string; - description: string; - availableOptions: { - value: string; - title: string; - }[]; - selectedOption: string; - options: { - [option: string]: { - description: string; - link: string; - component: any; - } - }; -} - -@Component({ - selector : 'layout-overview', - template : ` -
-
- -
-
{{overview.title}}
-
{{overview.description}}
-
- - - {{option.title}} - - -
-
- - -
- -
-
- - - -
- -
-
-
- -
- -
- -
-
-
-
-
-
- -
-
-
{{selectedOption.description}}
-
- /src/app/modules/admin{{selectedOption.link}}/ -
-
-
- -
-
-
-
-
-
- `, - styles : [ - ` - layout-overview #component-container > *:first-child { - position: relative; - display: flex; - flex-direction: column; - flex: 1 1 auto; - } - ` - ], - encapsulation: ViewEncapsulation.None -}) -export class LayoutOverviewComponent implements OnInit -{ - overview: PageLayoutsOverviewData; - - /** - * Constructor - */ - constructor(private _activatedRoute: ActivatedRoute) - { - } - - /** - * On init - */ - ngOnInit(): void - { - // Get the route data - this.overview = this._activatedRoute.snapshot.data.overview; - } -} diff --git a/src/app/modules/admin/ui/page-layouts/common/layout-overview/layout-overview.module.ts b/src/app/modules/admin/ui/page-layouts/common/layout-overview/layout-overview.module.ts deleted file mode 100644 index e1c1c6a8..00000000 --- a/src/app/modules/admin/ui/page-layouts/common/layout-overview/layout-overview.module.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { MatButtonModule } from '@angular/material/button'; -import { MatButtonToggleModule } from '@angular/material/button-toggle'; -import { MatIconModule } from '@angular/material/icon'; -import { MatTabsModule } from '@angular/material/tabs'; -import { SharedModule } from 'app/shared/shared.module'; -import { LayoutOverviewComponent } from 'app/modules/admin/ui/page-layouts/common/layout-overview/layout-overview.component'; - -@NgModule({ - declarations: [ - LayoutOverviewComponent - ], - imports : [ - SharedModule, - RouterModule.forChild([]), - MatButtonModule, - MatButtonToggleModule, - MatIconModule, - MatTabsModule - ], - exports : [ - LayoutOverviewComponent - ] -}) -export class LayoutOverviewModule -{ -} diff --git a/src/app/modules/admin/ui/page-layouts/empty/normal-scroll/empty.component.ts b/src/app/modules/admin/ui/page-layouts/empty/normal-scroll/empty.component.ts deleted file mode 100644 index 1bfd34be..00000000 --- a/src/app/modules/admin/ui/page-layouts/empty/normal-scroll/empty.component.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; - -@Component({ - selector : 'empty-normal-scroll', - templateUrl : './empty.component.html', - encapsulation: ViewEncapsulation.None -}) -export class EmptyNormalScrollComponent -{ - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/ui/page-layouts/empty/page-scroll/empty.component.html b/src/app/modules/admin/ui/page-layouts/empty/page-scroll/empty.component.html deleted file mode 100644 index 0d1c8a7e..00000000 --- a/src/app/modules/admin/ui/page-layouts/empty/page-scroll/empty.component.html +++ /dev/null @@ -1,13 +0,0 @@ -
- - -
- - -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/empty/page-scroll/empty.component.ts b/src/app/modules/admin/ui/page-layouts/empty/page-scroll/empty.component.ts deleted file mode 100644 index d35289dc..00000000 --- a/src/app/modules/admin/ui/page-layouts/empty/page-scroll/empty.component.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; - -@Component({ - selector : 'empty-page-scroll', - templateUrl : './empty.component.html', - encapsulation: ViewEncapsulation.None -}) -export class EmptyPageScrollComponent -{ - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/ui/page-layouts/overview/overview.component.html b/src/app/modules/admin/ui/page-layouts/overview/overview.component.html deleted file mode 100644 index 64f314e0..00000000 --- a/src/app/modules/admin/ui/page-layouts/overview/overview.component.html +++ /dev/null @@ -1,62 +0,0 @@ -
- - -
-
- - - -
-

- Overview -

-
-
-
- - -
- -
- - -

Introduction

-

- Page layouts are set of pre-made layouts that can be used as the starter on any page/app design. While they provide some styling by default, it's very minimal - and can be easily modified from the component you create. -

-

- Main benefits of using page layouts are; -

-
    -
  • -

    Consistency

    - Your apps and pages will all look similar in terms of layout and general styling which essentially make them more user friendly and easy - to learn. -
  • -
  • -

    Easy modifications

    - In the future, if you decide to change the design of your pages, add elements or modify the existing ones, it can be done very easily - since all your pages will be sharing same class names and the general code structure. -
  • -
  • -

    Easier learning curve for your users

    - Making the general design and layout of your pages similar will make them easier to learn for your users. They - won't be looking for a save button or a search field over and over again, trying to find and memorize their locations for each page since all pages will - be sharing a similar structure. -
  • -
- -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/page-layouts.module.ts b/src/app/modules/admin/ui/page-layouts/page-layouts.module.ts deleted file mode 100644 index 50b5312b..00000000 --- a/src/app/modules/admin/ui/page-layouts/page-layouts.module.ts +++ /dev/null @@ -1,1038 +0,0 @@ -import { NgModule } from '@angular/core'; -import { Route, RouterModule } from '@angular/router'; -import { MatButtonModule } from '@angular/material/button'; -import { MatIconModule } from '@angular/material/icon'; -import { MatMenuModule } from '@angular/material/menu'; -import { MatSidenavModule } from '@angular/material/sidenav'; -import { MatTabsModule } from '@angular/material/tabs'; -import { SharedModule } from 'app/shared/shared.module'; -import { DemoPlaceholderModule } from 'app/modules/admin/ui/page-layouts/common/demo-placeholder/demo-placeholder.module'; -import { DemoSidebarModule } from 'app/modules/admin/ui/page-layouts/common/demo-sidebar/demo-sidebar.module'; -import { LayoutOverviewModule } from 'app/modules/admin/ui/page-layouts/common/layout-overview/layout-overview.module'; -import { LayoutOverviewComponent } from 'app/modules/admin/ui/page-layouts/common/layout-overview/layout-overview.component'; - -import { OverviewComponent } from 'app/modules/admin/ui/page-layouts/overview/overview.component'; - -import { EmptyNormalScrollComponent } from 'app/modules/admin/ui/page-layouts/empty/normal-scroll/empty.component'; -import { EmptyPageScrollComponent } from 'app/modules/admin/ui/page-layouts/empty/page-scroll/empty.component'; - -import { CardedFullwidthPageScrollComponent } from 'app/modules/admin/ui/page-layouts/carded/fullwidth/page-scroll/fullwidth.component'; -import { CardedFullwidthNormalScrollComponent } from 'app/modules/admin/ui/page-layouts/carded/fullwidth/normal-scroll/fullwidth.component'; -import { CardedFullwidthContentScrollComponent } from 'app/modules/admin/ui/page-layouts/carded/fullwidth/content-scroll/fullwidth.component'; - -import { CardedLeftSidebar1NormalScrollComponent } from 'app/modules/admin/ui/page-layouts/carded/left-sidebar-1/normal-scroll/left-sidebar-1.component'; -import { CardedLeftSidebar1PageScrollComponent } from 'app/modules/admin/ui/page-layouts/carded/left-sidebar-1/page-scroll/left-sidebar-1.component'; -import { CardedLeftSidebar1ContentScrollComponent } from 'app/modules/admin/ui/page-layouts/carded/left-sidebar-1/content-scroll/left-sidebar-1.component'; - -import { CardedLeftSidebar2ContentScrollComponent } from 'app/modules/admin/ui/page-layouts/carded/left-sidebar-2/content-scroll/left-sidebar-2.component'; -import { CardedLeftSidebar2NormalScrollComponent } from 'app/modules/admin/ui/page-layouts/carded/left-sidebar-2/normal-scroll/left-sidebar-2.component'; -import { CardedLeftSidebar2PageScrollComponent } from 'app/modules/admin/ui/page-layouts/carded/left-sidebar-2/page-scroll/left-sidebar-2.component'; - -import { CardedRightSidebar2PageScrollComponent } from 'app/modules/admin/ui/page-layouts/carded/right-sidebar-2/page-scroll/right-sidebar-2.component'; -import { CardedRightSidebar1NormalScrollComponent } from 'app/modules/admin/ui/page-layouts/carded/right-sidebar-1/normal-scroll/right-sidebar-1.component'; -import { CardedRightSidebar2ContentScrollComponent } from 'app/modules/admin/ui/page-layouts/carded/right-sidebar-2/content-scroll/right-sidebar-2.component'; - -import { CardedRightSidebar1PageScrollComponent } from 'app/modules/admin/ui/page-layouts/carded/right-sidebar-1/page-scroll/right-sidebar-1.component'; -import { CardedRightSidebar1ContentScrollComponent } from 'app/modules/admin/ui/page-layouts/carded/right-sidebar-1/content-scroll/right-sidebar-1.component'; -import { CardedRightSidebar2NormalScrollComponent } from 'app/modules/admin/ui/page-layouts/carded/right-sidebar-2/normal-scroll/right-sidebar-2.component'; - -import { SimpleFullwidthNormalScrollComponent } from 'app/modules/admin/ui/page-layouts/simple/fullwidth/normal-scroll/fullwidth.component'; -import { SimpleFullwidthPageScrollComponent } from 'app/modules/admin/ui/page-layouts/simple/fullwidth/page-scroll/fullwidth.component'; -import { SimpleFullwidthContentScrollComponent } from 'app/modules/admin/ui/page-layouts/simple/fullwidth/content-scroll/fullwidth.component'; - -import { SimpleLeftSidebar1NormalScrollComponent } from 'app/modules/admin/ui/page-layouts/simple/left-sidebar-1/normal-scroll/left-sidebar-1.component'; -import { SimpleLeftSidebar1PageScrollComponent } from 'app/modules/admin/ui/page-layouts/simple/left-sidebar-1/page-scroll/left-sidebar-1.component'; -import { SimpleLeftSidebar1ContentScrollComponent } from 'app/modules/admin/ui/page-layouts/simple/left-sidebar-1/content-scroll/left-sidebar-1.component'; - -import { SimpleLeftSidebar2NormalScrollComponent } from 'app/modules/admin/ui/page-layouts/simple/left-sidebar-2/normal-scroll/left-sidebar-2.component'; -import { SimpleLeftSidebar2PageScrollComponent } from 'app/modules/admin/ui/page-layouts/simple/left-sidebar-2/page-scroll/left-sidebar-2.component'; -import { SimpleLeftSidebar2ContentScrollComponent } from 'app/modules/admin/ui/page-layouts/simple/left-sidebar-2/content-scroll/left-sidebar-2.component'; -import { SimpleLeftSidebar2InnerScrollComponent } from 'app/modules/admin/ui/page-layouts/simple/left-sidebar-2/inner-scroll/left-sidebar-2.component'; - -import { SimpleLeftSidebar3NormalScrollComponent } from 'app/modules/admin/ui/page-layouts/simple/left-sidebar-3/normal-scroll/left-sidebar-3.component'; -import { SimpleLeftSidebar3PageScrollComponent } from 'app/modules/admin/ui/page-layouts/simple/left-sidebar-3/page-scroll/left-sidebar-3.component'; -import { SimpleLeftSidebar3ScrollComponent } from 'app/modules/admin/ui/page-layouts/simple/left-sidebar-3/content-scroll/left-sidebar-3.component'; - -import { SimpleRightSidebar1NormalScrollComponent } from 'app/modules/admin/ui/page-layouts/simple/right-sidebar-1/normal-scroll/right-sidebar-1.component'; -import { SimpleRightSidebar1PageScrollComponent } from 'app/modules/admin/ui/page-layouts/simple/right-sidebar-1/page-scroll/right-sidebar-1.component'; -import { SimpleRightSidebar1ContentScrollComponent } from 'app/modules/admin/ui/page-layouts/simple/right-sidebar-1/content-scroll/right-sidebar-1.component'; - -import { SimpleRightSidebar2NormalScrollComponent } from 'app/modules/admin/ui/page-layouts/simple/right-sidebar-2/normal-scroll/right-sidebar-2.component'; -import { SimpleRightSidebar2PageScrollComponent } from 'app/modules/admin/ui/page-layouts/simple/right-sidebar-2/page-scroll/right-sidebar-2.component'; -import { SimpleRightSidebar2ContentScrollComponent } from 'app/modules/admin/ui/page-layouts/simple/right-sidebar-2/content-scroll/right-sidebar-2.component'; -import { SimpleRightSidebar2InnerScrollComponent } from 'app/modules/admin/ui/page-layouts/simple/right-sidebar-2/inner-scroll/right-sidebar-2.component'; - -import { SimpleRightSidebar3NormalScrollComponent } from 'app/modules/admin/ui/page-layouts/simple/right-sidebar-3/normal-scroll/right-sidebar-3.component'; -import { SimpleRightSidebar3PageScrollComponent } from 'app/modules/admin/ui/page-layouts/simple/right-sidebar-3/page-scroll/right-sidebar-3.component'; -import { SimpleRightSidebar3ContentScrollComponent } from 'app/modules/admin/ui/page-layouts/simple/right-sidebar-3/content-scroll/right-sidebar-3.component'; - -export const overviews = { - empty : { - title : 'Empty Layout', - description : 'Layout that spans the entire width of the content area with 2 different scroll modes.', - availableOptions: [ - { - value: 'normalScroll', - title: 'Normal Scroll' - }, - { - value: 'pageScroll', - title: 'Page Scroll' - } - ], - selectedOption : 'normalScroll', - options : { - normalScroll: { - description: 'No scrolling area manipulations, entire viewport scrolls (body scroll).', - link : '/ui/page-layouts/empty/normal-scroll', - component : EmptyNormalScrollComponent - }, - pageScroll : { - description: 'Only the page area scrolls making the main toolbar and footer to stick to the top and bottom of the viewport respectively.', - link : '/ui/page-layouts/empty/page-scroll', - component : EmptyPageScrollComponent - } - } - }, - carded: { - fullwidth : { - title : 'Carded Fullwidth Layout', - description : 'Carded layout that spans the entire width of the content area with a dedicated header and 3 different scroll modes.', - availableOptions: [ - { - value: 'normalScroll', - title: 'Normal Scroll' - }, - { - value: 'pageScroll', - title: 'Page Scroll' - }, - { - value: 'contentScroll', - title: 'Content Scroll' - } - ], - selectedOption : 'normalScroll', - options : { - normalScroll : { - description: 'No scrolling area manipulations, entire viewport scrolls (body scroll).', - link : '/ui/page-layouts/carded/fullwidth/normal-scroll', - component : CardedFullwidthNormalScrollComponent - }, - pageScroll : { - description: 'Only the page area scrolls making the main toolbar and footer to stick to the top and bottom of the viewport respectively.', - link : '/ui/page-layouts/carded/fullwidth/page-scroll', - component : CardedFullwidthPageScrollComponent - }, - contentScroll: { - description: 'Only the content area of the page scrolls making everything else to stick into their positions.', - link : '/ui/page-layouts/carded/fullwidth/content-scroll', - component : CardedFullwidthContentScrollComponent - } - } - }, - leftSidebar1: { - title : 'Carded Left Sidebar #1', - description : 'Carded layout with a left sidebar, a dedicated header and 3 different scroll modes.', - availableOptions: [ - { - value: 'normalScroll', - title: 'Normal Scroll' - }, - { - value: 'pageScroll', - title: 'Page Scroll' - }, - { - value: 'contentScroll', - title: 'Content Scroll' - } - ], - selectedOption : 'normalScroll', - options : { - normalScroll : { - description: 'No scrolling area manipulations, entire viewport scrolls (body scroll).', - link : '/ui/page-layouts/carded/left-sidebar-1/normal-scroll', - component : CardedLeftSidebar1NormalScrollComponent - }, - pageScroll : { - description: 'Only the page area scrolls making the main toolbar and footer to stick to the top and bottom of the viewport respectively.', - link : '/ui/page-layouts/carded/left-sidebar-1/page-scroll', - component : CardedLeftSidebar1PageScrollComponent - }, - contentScroll: { - description: 'Only the content area of the page scrolls making everything else to stick into their positions.', - link : '/ui/page-layouts/carded/left-sidebar-1/content-scroll', - component : CardedLeftSidebar1ContentScrollComponent - } - } - }, - leftSidebar2: { - title : 'Carded Left Sidebar #2', - description : 'Carded layout with a left sidebar, a dedicated header and 3 different scroll modes.', - availableOptions: [ - { - value: 'normalScroll', - title: 'Normal Scroll' - }, - { - value: 'pageScroll', - title: 'Page Scroll' - }, - { - value: 'contentScroll', - title: 'Content Scroll' - } - ], - selectedOption : 'normalScroll', - options : { - normalScroll : { - description: 'No scrolling area manipulations, entire viewport scrolls (body scroll).', - link : '/ui/page-layouts/carded/left-sidebar-2/normal-scroll', - component : CardedLeftSidebar2NormalScrollComponent - }, - pageScroll : { - description: 'Only the page area scrolls making the main toolbar and footer to stick to the top and bottom of the viewport respectively.', - link : '/ui/page-layouts/carded/left-sidebar-2/page-scroll', - component : CardedLeftSidebar2PageScrollComponent - }, - contentScroll: { - description: 'Only the content area of the page scrolls making everything else to stick into their positions.', - link : '/ui/page-layouts/carded/left-sidebar-2/content-scroll', - component : CardedLeftSidebar2ContentScrollComponent - } - } - }, - rightSidebar1: { - title : 'Carded Right Sidebar #1', - description : 'Carded layout with a right sidebar, a dedicated header and 3 different scroll modes.', - availableOptions: [ - { - value: 'normalScroll', - title: 'Normal Scroll' - }, - { - value: 'pageScroll', - title: 'Page Scroll' - }, - { - value: 'contentScroll', - title: 'Content Scroll' - } - ], - selectedOption : 'normalScroll', - options : { - normalScroll : { - description: 'No scrolling area manipulations, entire viewport scrolls (body scroll).', - link : '/ui/page-layouts/carded/right-sidebar-1/normal-scroll', - component : CardedRightSidebar1NormalScrollComponent - }, - pageScroll : { - description: 'Only the page area scrolls making the main toolbar and footer to stick to the top and bottom of the viewport respectively.', - link : '/ui/page-layouts/carded/right-sidebar-1/page-scroll', - component : CardedRightSidebar1PageScrollComponent - }, - contentScroll: { - description: 'Only the content area of the page scrolls making everything else to stick into their positions.', - link : '/ui/page-layouts/carded/right-sidebar-1/content-scroll', - component : CardedRightSidebar1ContentScrollComponent - } - } - }, - rightSidebar2: { - title : 'Carded Right Sidebar #2', - description : 'Carded layout with a right sidebar, a dedicated header and 3 different scroll modes.', - availableOptions: [ - { - value: 'normalScroll', - title: 'Normal Scroll' - }, - { - value: 'pageScroll', - title: 'Page Scroll' - }, - { - value: 'contentScroll', - title: 'Content Scroll' - } - ], - selectedOption : 'normalScroll', - options : { - normalScroll : { - description: 'No scrolling area manipulations, entire viewport scrolls (body scroll).', - link : '/ui/page-layouts/carded/right-sidebar-2/normal-scroll', - component : CardedRightSidebar2NormalScrollComponent - }, - pageScroll : { - description: 'Only the page area scrolls making the main toolbar and footer to stick to the top and bottom of the viewport respectively.', - link : '/ui/page-layouts/carded/right-sidebar-2/page-scroll', - component : CardedRightSidebar2PageScrollComponent - }, - contentScroll: { - description: 'Only the content area of the page scrolls making everything else to stick into their positions.', - link : '/ui/page-layouts/carded/right-sidebar-2/content-scroll', - component : CardedRightSidebar2ContentScrollComponent - } - } - } - }, - simple: { - fullwidth : { - title : 'Fullwidth Layout', - description : 'Layout that spans the entire width of the content area with a dedicated header and 3 different scroll modes.', - availableOptions: [ - { - value: 'normalScroll', - title: 'Normal Scroll' - }, - { - value: 'pageScroll', - title: 'Page Scroll' - }, - { - value: 'contentScroll', - title: 'Content Scroll' - } - ], - selectedOption : 'normalScroll', - options : { - normalScroll : { - description: 'No scrolling area manipulations, entire viewport scrolls (body scroll).', - link : '/ui/page-layouts/simple/fullwidth/normal-scroll', - component : SimpleFullwidthNormalScrollComponent - }, - pageScroll : { - description: 'Only the page area scrolls making the main toolbar and footer to stick to the top and bottom of the viewport respectively.', - link : '/ui/page-layouts/simple/fullwidth/page-scroll', - component : SimpleFullwidthPageScrollComponent - }, - contentScroll: { - description: 'Only the content area of the page scrolls making everything else to stick into their positions.', - link : '/ui/page-layouts/simple/fullwidth/content-scroll', - component : SimpleFullwidthContentScrollComponent - } - } - }, - leftSidebar1 : { - title : 'Left Sidebar #1', - description : 'Layout with a left sidebar and 3 different scroll modes.', - availableOptions: [ - { - value: 'normalScroll', - title: 'Normal Scroll' - }, - { - value: 'pageScroll', - title: 'Page Scroll' - }, - { - value: 'contentScroll', - title: 'Content Scroll' - } - ], - selectedOption : 'normalScroll', - options : { - normalScroll : { - description: 'No scrolling area manipulations, entire viewport scrolls (body scroll).', - link : '/ui/page-layouts/simple/left-sidebar-1/normal-scroll', - component : SimpleLeftSidebar1NormalScrollComponent - }, - pageScroll : { - description: 'Only the page area scrolls making the main toolbar and footer to stick to the top and bottom of the viewport respectively.', - link : '/ui/page-layouts/simple/left-sidebar-1/page-scroll', - component : SimpleLeftSidebar1PageScrollComponent - }, - contentScroll: { - description: 'Only the content area of the page scrolls making everything else to stick into their positions.', - link : '/ui/page-layouts/simple/left-sidebar-1/content-scroll', - component : SimpleLeftSidebar1ContentScrollComponent - } - } - }, - leftSidebar2 : { - title : 'Left Sidebar #2', - description : 'Layout with a left sidebar, a dedicated header and 4 different scroll modes.', - availableOptions: [ - { - value: 'normalScroll', - title: 'Normal Scroll' - }, - { - value: 'pageScroll', - title: 'Page Scroll' - }, - { - value: 'contentScroll', - title: 'Content Scroll' - }, - { - value: 'innerScroll', - title: 'Inner Scroll' - } - ], - selectedOption : 'normalScroll', - options : { - normalScroll : { - description: 'No scrolling area manipulations, entire viewport scrolls (body scroll).', - link : '/ui/page-layouts/simple/left-sidebar-2/normal-scroll', - component : SimpleLeftSidebar2NormalScrollComponent - }, - pageScroll : { - description: 'Only the page area scrolls making the main toolbar and footer to stick to the top and bottom of the viewport respectively.', - link : '/ui/page-layouts/simple/left-sidebar-2/page-scroll', - component : SimpleLeftSidebar2PageScrollComponent - }, - contentScroll: { - description: 'Only the content area of the page scrolls making everything else to stick into their positions.', - link : '/ui/page-layouts/simple/left-sidebar-2/content-scroll', - component : SimpleLeftSidebar2ContentScrollComponent - }, - innerScroll : { - description: 'Only the inner content area of the page scrolls making sidebar and everything else to stick into their positions.', - link : '/ui/page-layouts/simple/left-sidebar-2/inner-scroll', - component : SimpleLeftSidebar2InnerScrollComponent - } - } - }, - leftSidebar3 : { - title : 'Left Sidebar #3', - description : 'Layout with left sidebar, a fullwidth dedicated header and 3 different scroll modes.', - availableOptions: [ - { - value: 'normalScroll', - title: 'Normal Scroll' - }, - { - value: 'pageScroll', - title: 'Page Scroll' - }, - { - value: 'contentScroll', - title: 'Content Scroll' - } - ], - selectedOption : 'normalScroll', - options : { - normalScroll : { - description: 'No scrolling area manipulations, entire viewport scrolls (body scroll).', - link : '/ui/page-layouts/simple/left-sidebar-3/normal-scroll', - component : SimpleLeftSidebar3NormalScrollComponent - }, - pageScroll : { - description: 'Only the page area scrolls making the main toolbar and footer to stick to the top and bottom of the viewport respectively.', - link : '/ui/page-layouts/simple/left-sidebar-3/page-scroll', - component : SimpleLeftSidebar3PageScrollComponent - }, - contentScroll: { - description: 'Only the content area of the page scrolls making everything else to stick into their positions.', - link : '/ui/page-layouts/simple/left-sidebar-3/content-scroll', - component : SimpleLeftSidebar3ScrollComponent - } - } - }, - rightSidebar1: { - title : 'Right Sidebar #1', - description : 'Layout with a right sidebar and 3 different scroll modes.', - availableOptions: [ - { - value: 'normalScroll', - title: 'Normal Scroll' - }, - { - value: 'pageScroll', - title: 'Page Scroll' - }, - { - value: 'contentScroll', - title: 'Content Scroll' - } - ], - selectedOption : 'normalScroll', - options : { - normalScroll : { - description: 'No scrolling area manipulations, entire viewport scrolls (body scroll).', - link : '/ui/page-layouts/simple/right-sidebar-1/normal-scroll', - component : SimpleRightSidebar1NormalScrollComponent - }, - pageScroll : { - description: 'Only the page area scrolls making the main toolbar and footer to stick to the top and bottom of the viewport respectively.', - link : '/ui/page-layouts/simple/right-sidebar-1/page-scroll', - component : SimpleRightSidebar1PageScrollComponent - }, - contentScroll: { - description: 'Only the content area of the page scrolls making everything else to stick into their positions.', - link : '/ui/page-layouts/simple/right-sidebar-1/content-scroll', - component : SimpleRightSidebar1ContentScrollComponent - } - } - }, - rightSidebar2: { - title : 'Right Sidebar #2', - description : 'Layout with a right sidebar, a dedicated header and 4 different scroll modes.', - availableOptions: [ - { - value: 'normalScroll', - title: 'Normal Scroll' - }, - { - value: 'pageScroll', - title: 'Page Scroll' - }, - { - value: 'contentScroll', - title: 'Content Scroll' - }, - { - value: 'innerScroll', - title: 'Inner Scroll' - } - ], - selectedOption : 'normalScroll', - options : { - normalScroll : { - description: 'No scrolling area manipulations, entire viewport scrolls (body scroll).', - link : '/ui/page-layouts/simple/right-sidebar-2/normal-scroll', - component : SimpleRightSidebar2NormalScrollComponent - }, - pageScroll : { - description: 'Only the page area scrolls making the main toolbar and footer to stick to the top and bottom of the viewport respectively.', - link : '/ui/page-layouts/simple/right-sidebar-2/page-scroll', - component : SimpleRightSidebar2PageScrollComponent - }, - contentScroll: { - description: 'Only the content area of the page scrolls making everything else to stick into their positions.', - link : '/ui/page-layouts/simple/right-sidebar-2/content-scroll', - component : SimpleRightSidebar2ContentScrollComponent - }, - innerScroll : { - description: 'Only the inner content area of the page scrolls making sidebar and everything else to stick into their positions.', - link : '/ui/page-layouts/simple/right-sidebar-2/inner-scroll', - component : SimpleRightSidebar2InnerScrollComponent - } - } - }, - rightSidebar3: { - title : 'Right Sidebar #3', - description : 'Layout with right sidebar, a fullwidth dedicated header and 3 different scroll modes.', - availableOptions: [ - { - value: 'normalScroll', - title: 'Normal Scroll' - }, - { - value: 'pageScroll', - title: 'Page Scroll' - }, - { - value: 'contentScroll', - title: 'Content Scroll' - } - ], - selectedOption : 'normalScroll', - options : { - normalScroll : { - description: 'No scrolling area manipulations, entire viewport scrolls (body scroll).', - link : '/ui/page-layouts/simple/right-sidebar-3/normal-scroll', - component : SimpleRightSidebar3NormalScrollComponent - }, - pageScroll : { - description: 'Only the page area scrolls making the main toolbar and footer to stick to the top and bottom of the viewport respectively.', - link : '/ui/page-layouts/simple/right-sidebar-3/page-scroll', - component : SimpleRightSidebar3PageScrollComponent - }, - contentScroll: { - description: 'Only the content area of the page scrolls making everything else to stick into their positions.', - link : '/ui/page-layouts/simple/right-sidebar-3/content-scroll', - component : SimpleRightSidebar3ContentScrollComponent - } - } - } - } -}; - -export const routes: Route[] = [ - // Overview - { - path : 'overview', - component: OverviewComponent - }, - - // Empty - { - path : 'empty', - children: [ - { - path : '', - pathMatch : 'full', - redirectTo: 'overview' - }, - { - path : 'overview', - component: LayoutOverviewComponent, - data : { - overview: overviews.empty - } - }, - { - path : 'normal-scroll', - component: EmptyNormalScrollComponent - }, - { - path : 'page-scroll', - component: EmptyPageScrollComponent - } - ] - }, - - // Carded - { - path : 'carded', - children: [ - { - path : 'fullwidth', - children: [ - { - path : '', - pathMatch : 'full', - redirectTo: 'overview' - }, - { - path : 'overview', - component: LayoutOverviewComponent, - data : { - overview: overviews.carded.fullwidth - } - }, - { - path : 'normal-scroll', - component: CardedFullwidthNormalScrollComponent - }, - { - path : 'page-scroll', - component: CardedFullwidthPageScrollComponent - }, - { - path : 'content-scroll', - component: CardedFullwidthContentScrollComponent - } - ] - }, - { - path : 'left-sidebar-1', - children: [ - { - path : '', - pathMatch : 'full', - redirectTo: 'overview' - }, - { - path : 'overview', - component: LayoutOverviewComponent, - data : { - overview: overviews.carded.leftSidebar1 - } - }, - { - path : 'normal-scroll', - component: CardedLeftSidebar1NormalScrollComponent - }, - { - path : 'page-scroll', - component: CardedLeftSidebar1PageScrollComponent - }, - { - path : 'content-scroll', - component: CardedLeftSidebar1ContentScrollComponent - } - ] - }, - { - path : 'left-sidebar-2', - children: [ - { - path : '', - pathMatch : 'full', - redirectTo: 'overview' - }, - { - path : 'overview', - component: LayoutOverviewComponent, - data : { - overview: overviews.carded.leftSidebar2 - } - }, - { - path : 'normal-scroll', - component: CardedLeftSidebar2NormalScrollComponent - }, - { - path : 'page-scroll', - component: CardedLeftSidebar2PageScrollComponent - }, - { - path : 'content-scroll', - component: CardedLeftSidebar2ContentScrollComponent - } - ] - }, - { - path : 'right-sidebar-1', - children: [ - { - path : '', - pathMatch : 'full', - redirectTo: 'overview' - }, - { - path : 'overview', - component: LayoutOverviewComponent, - data : { - overview: overviews.carded.rightSidebar1 - } - }, - { - path : 'normal-scroll', - component: CardedRightSidebar1NormalScrollComponent - }, - { - path : 'page-scroll', - component: CardedRightSidebar1PageScrollComponent - }, - { - path : 'content-scroll', - component: CardedRightSidebar1ContentScrollComponent - } - ] - }, - { - path : 'right-sidebar-2', - children: [ - { - path : '', - pathMatch : 'full', - redirectTo: 'overview' - }, - { - path : 'overview', - component: LayoutOverviewComponent, - data : { - overview: overviews.carded.rightSidebar2 - } - }, - { - path : 'normal-scroll', - component: CardedRightSidebar2NormalScrollComponent - }, - { - path : 'page-scroll', - component: CardedRightSidebar2PageScrollComponent - }, - { - path : 'content-scroll', - component: CardedRightSidebar2ContentScrollComponent - } - ] - } - ] - }, - - // Simple - { - path : 'simple', - children: [ - { - path : 'fullwidth', - children: [ - { - path : '', - pathMatch : 'full', - redirectTo: 'overview' - }, - { - path : 'overview', - component: LayoutOverviewComponent, - data : { - overview: overviews.simple.fullwidth - } - }, - { - path : 'normal-scroll', - component: SimpleFullwidthNormalScrollComponent - }, - { - path : 'page-scroll', - component: SimpleFullwidthPageScrollComponent - }, - { - path : 'content-scroll', - component: SimpleFullwidthContentScrollComponent - } - ] - }, - { - path : 'left-sidebar-1', - children: [ - { - path : '', - pathMatch : 'full', - redirectTo: 'overview' - }, - { - path : 'overview', - component: LayoutOverviewComponent, - data : { - overview: overviews.simple.leftSidebar1 - } - }, - { - path : 'normal-scroll', - component: SimpleLeftSidebar1NormalScrollComponent - }, - { - path : 'page-scroll', - component: SimpleLeftSidebar1PageScrollComponent - }, - { - path : 'content-scroll', - component: SimpleLeftSidebar1ContentScrollComponent - } - ] - }, - { - path : 'left-sidebar-2', - children: [ - { - path : '', - pathMatch : 'full', - redirectTo: 'overview' - }, - { - path : 'overview', - component: LayoutOverviewComponent, - data : { - overview: overviews.simple.leftSidebar2 - } - }, - { - path : 'normal-scroll', - component: SimpleLeftSidebar2NormalScrollComponent - }, - { - path : 'page-scroll', - component: SimpleLeftSidebar2PageScrollComponent - }, - { - path : 'content-scroll', - component: SimpleLeftSidebar2ContentScrollComponent - }, - { - path : 'inner-scroll', - component: SimpleLeftSidebar2InnerScrollComponent - } - ] - }, - { - path : 'left-sidebar-3', - children: [ - { - path : '', - pathMatch : 'full', - redirectTo: 'overview' - }, - { - path : 'overview', - component: LayoutOverviewComponent, - data : { - overview: overviews.simple.leftSidebar3 - } - }, - { - path : 'normal-scroll', - component: SimpleLeftSidebar3NormalScrollComponent - }, - { - path : 'page-scroll', - component: SimpleLeftSidebar3PageScrollComponent - }, - { - path : 'content-scroll', - component: SimpleLeftSidebar3ScrollComponent - } - ] - }, - { - path : 'right-sidebar-1', - children: [ - { - path : '', - pathMatch : 'full', - redirectTo: 'overview' - }, - { - path : 'overview', - component: LayoutOverviewComponent, - data : { - overview: overviews.simple.rightSidebar1 - } - }, - { - path : 'normal-scroll', - component: SimpleRightSidebar1NormalScrollComponent - }, - { - path : 'page-scroll', - component: SimpleRightSidebar1PageScrollComponent - }, - { - path : 'content-scroll', - component: SimpleRightSidebar1ContentScrollComponent - } - ] - }, - { - path : 'right-sidebar-2', - children: [ - { - path : '', - pathMatch : 'full', - redirectTo: 'overview' - }, - { - path : 'overview', - component: LayoutOverviewComponent, - data : { - overview: overviews.simple.rightSidebar2 - } - }, - { - path : 'normal-scroll', - component: SimpleRightSidebar2NormalScrollComponent - }, - { - path : 'page-scroll', - component: SimpleRightSidebar2PageScrollComponent - }, - { - path : 'content-scroll', - component: SimpleRightSidebar2ContentScrollComponent - }, - { - path : 'inner-scroll', - component: SimpleRightSidebar2InnerScrollComponent - } - ] - }, - { - path : 'right-sidebar-3', - children: [ - { - path : '', - pathMatch : 'full', - redirectTo: 'overview' - }, - { - path : 'overview', - component: LayoutOverviewComponent, - data : { - overview: overviews.simple.rightSidebar3 - } - }, - { - path : 'normal-scroll', - component: SimpleRightSidebar3NormalScrollComponent - }, - { - path : 'page-scroll', - component: SimpleRightSidebar3PageScrollComponent - }, - { - path : 'content-scroll', - component: SimpleRightSidebar3ContentScrollComponent - } - ] - } - ] - } -]; - -@NgModule({ - declarations: [ - OverviewComponent, - - // Empty - EmptyNormalScrollComponent, - EmptyPageScrollComponent, - - // Carded - Fullwidth - CardedFullwidthNormalScrollComponent, - CardedFullwidthPageScrollComponent, - CardedFullwidthContentScrollComponent, - - // Carded - Left sidebar - CardedLeftSidebar1NormalScrollComponent, - CardedLeftSidebar1PageScrollComponent, - CardedLeftSidebar1ContentScrollComponent, - - CardedLeftSidebar2NormalScrollComponent, - CardedLeftSidebar2PageScrollComponent, - CardedLeftSidebar2ContentScrollComponent, - - - // Carded - Right sidebar - CardedRightSidebar1NormalScrollComponent, - CardedRightSidebar1PageScrollComponent, - CardedRightSidebar1ContentScrollComponent, - - CardedRightSidebar2NormalScrollComponent, - CardedRightSidebar2PageScrollComponent, - CardedRightSidebar2ContentScrollComponent, - - // Simple - Fullwidth - SimpleFullwidthNormalScrollComponent, - SimpleFullwidthPageScrollComponent, - SimpleFullwidthContentScrollComponent, - - // Simple - Left sidebar - SimpleLeftSidebar1NormalScrollComponent, - SimpleLeftSidebar1PageScrollComponent, - SimpleLeftSidebar1ContentScrollComponent, - - SimpleLeftSidebar2NormalScrollComponent, - SimpleLeftSidebar2PageScrollComponent, - SimpleLeftSidebar2ContentScrollComponent, - SimpleLeftSidebar2InnerScrollComponent, - - SimpleLeftSidebar3NormalScrollComponent, - SimpleLeftSidebar3PageScrollComponent, - SimpleLeftSidebar3ScrollComponent, - - // Simple - Right sidebar - SimpleRightSidebar1NormalScrollComponent, - SimpleRightSidebar1PageScrollComponent, - SimpleRightSidebar1ContentScrollComponent, - - SimpleRightSidebar2NormalScrollComponent, - SimpleRightSidebar2PageScrollComponent, - SimpleRightSidebar2ContentScrollComponent, - SimpleRightSidebar2InnerScrollComponent, - - SimpleRightSidebar3NormalScrollComponent, - SimpleRightSidebar3PageScrollComponent, - SimpleRightSidebar3ContentScrollComponent - ], - imports : [ - RouterModule.forChild(routes), - MatButtonModule, - MatIconModule, - MatMenuModule, - MatSidenavModule, - MatTabsModule, - SharedModule, - DemoPlaceholderModule, - DemoSidebarModule, - LayoutOverviewModule - ] -}) -export class PageLayoutsModule -{ -} diff --git a/src/app/modules/admin/ui/page-layouts/simple/fullwidth/content-scroll/fullwidth.component.html b/src/app/modules/admin/ui/page-layouts/simple/fullwidth/content-scroll/fullwidth.component.html deleted file mode 100644 index e8829904..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/fullwidth/content-scroll/fullwidth.component.html +++ /dev/null @@ -1,73 +0,0 @@ -
- - -
-
- -
- - -
- -
-

- Page heading -

-
-
- -
- - -
-
- - -
- - -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/simple/fullwidth/content-scroll/fullwidth.component.ts b/src/app/modules/admin/ui/page-layouts/simple/fullwidth/content-scroll/fullwidth.component.ts deleted file mode 100644 index 3fbd420b..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/fullwidth/content-scroll/fullwidth.component.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; - -@Component({ - selector : 'simple-fullwidth-content-scroll', - templateUrl : './fullwidth.component.html', - encapsulation: ViewEncapsulation.None -}) -export class SimpleFullwidthContentScrollComponent -{ - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/ui/page-layouts/simple/fullwidth/normal-scroll/fullwidth.component.html b/src/app/modules/admin/ui/page-layouts/simple/fullwidth/normal-scroll/fullwidth.component.html deleted file mode 100644 index e741d038..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/fullwidth/normal-scroll/fullwidth.component.html +++ /dev/null @@ -1,71 +0,0 @@ -
- - -
-
- -
- - -
- -
-

- Page heading -

-
-
- -
- - -
-
- - -
- - -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/simple/fullwidth/normal-scroll/fullwidth.component.ts b/src/app/modules/admin/ui/page-layouts/simple/fullwidth/normal-scroll/fullwidth.component.ts deleted file mode 100644 index 8cbd86b4..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/fullwidth/normal-scroll/fullwidth.component.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; - -@Component({ - selector : 'simple-fullwidth-normal-scroll', - templateUrl : './fullwidth.component.html', - encapsulation: ViewEncapsulation.None -}) -export class SimpleFullwidthNormalScrollComponent -{ - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/ui/page-layouts/simple/fullwidth/page-scroll/fullwidth.component.html b/src/app/modules/admin/ui/page-layouts/simple/fullwidth/page-scroll/fullwidth.component.html deleted file mode 100644 index fc95e900..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/fullwidth/page-scroll/fullwidth.component.html +++ /dev/null @@ -1,73 +0,0 @@ -
- - -
-
- -
- - -
- -
-

- Page heading -

-
-
- -
- - -
-
- - -
- - -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/simple/fullwidth/page-scroll/fullwidth.component.ts b/src/app/modules/admin/ui/page-layouts/simple/fullwidth/page-scroll/fullwidth.component.ts deleted file mode 100644 index a8d7301c..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/fullwidth/page-scroll/fullwidth.component.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; - -@Component({ - selector : 'simple-fullwidth-page-scroll', - templateUrl : './fullwidth.component.html', - encapsulation: ViewEncapsulation.None -}) -export class SimpleFullwidthPageScrollComponent -{ - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-1/content-scroll/left-sidebar-1.component.html b/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-1/content-scroll/left-sidebar-1.component.html deleted file mode 100644 index ec5ca7a5..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-1/content-scroll/left-sidebar-1.component.html +++ /dev/null @@ -1,39 +0,0 @@ -
- - - - - - - - - - - - - -
- - - - - -
- -
- -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-1/content-scroll/left-sidebar-1.component.ts b/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-1/content-scroll/left-sidebar-1.component.ts deleted file mode 100644 index 3371c7be..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-1/content-scroll/left-sidebar-1.component.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import { FuseMediaWatcherService } from '@fuse/services/media-watcher'; - -@Component({ - selector : 'simple-left-sidebar-1-content-scroll', - templateUrl : './left-sidebar-1.component.html', - encapsulation: ViewEncapsulation.None -}) -export class SimpleLeftSidebar1ContentScrollComponent implements OnInit, OnDestroy -{ - drawerMode: 'over' | 'side' = 'side'; - drawerOpened: boolean = true; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor(private _fuseMediaWatcherService: FuseMediaWatcherService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Subscribe to media changes - this._fuseMediaWatcherService.onMediaChange$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe(({matchingAliases}) => { - - // Set the drawerMode and drawerOpened - if ( matchingAliases.includes('lg') ) - { - this.drawerMode = 'side'; - this.drawerOpened = true; - } - else - { - this.drawerMode = 'over'; - this.drawerOpened = false; - } - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } -} diff --git a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-1/normal-scroll/left-sidebar-1.component.html b/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-1/normal-scroll/left-sidebar-1.component.html deleted file mode 100644 index fc20b501..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-1/normal-scroll/left-sidebar-1.component.html +++ /dev/null @@ -1,39 +0,0 @@ -
- - - - - - - - - - - - - -
- - - - - -
- -
- -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-1/normal-scroll/left-sidebar-1.component.ts b/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-1/normal-scroll/left-sidebar-1.component.ts deleted file mode 100644 index d459d901..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-1/normal-scroll/left-sidebar-1.component.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import { FuseMediaWatcherService } from '@fuse/services/media-watcher'; - -@Component({ - selector : 'simple-left-sidebar-1-normal-scroll', - templateUrl : './left-sidebar-1.component.html', - encapsulation: ViewEncapsulation.None -}) -export class SimpleLeftSidebar1NormalScrollComponent implements OnInit, OnDestroy -{ - drawerMode: 'over' | 'side' = 'side'; - drawerOpened: boolean = true; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor(private _fuseMediaWatcherService: FuseMediaWatcherService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Subscribe to media changes - this._fuseMediaWatcherService.onMediaChange$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe(({matchingAliases}) => { - - // Set the drawerMode and drawerOpened - if ( matchingAliases.includes('lg') ) - { - this.drawerMode = 'side'; - this.drawerOpened = true; - } - else - { - this.drawerMode = 'over'; - this.drawerOpened = false; - } - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } -} diff --git a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-1/page-scroll/left-sidebar-1.component.html b/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-1/page-scroll/left-sidebar-1.component.html deleted file mode 100644 index e507d507..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-1/page-scroll/left-sidebar-1.component.html +++ /dev/null @@ -1,41 +0,0 @@ -
- - - - - - - - - - - - - -
- - - - - -
- -
- -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-1/page-scroll/left-sidebar-1.component.ts b/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-1/page-scroll/left-sidebar-1.component.ts deleted file mode 100644 index 2752bda8..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-1/page-scroll/left-sidebar-1.component.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import { FuseMediaWatcherService } from '@fuse/services/media-watcher'; - -@Component({ - selector : 'simple-left-sidebar-1-page-scroll', - templateUrl : './left-sidebar-1.component.html', - encapsulation: ViewEncapsulation.None -}) -export class SimpleLeftSidebar1PageScrollComponent implements OnInit, OnDestroy -{ - drawerMode: 'over' | 'side' = 'side'; - drawerOpened: boolean = true; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor(private _fuseMediaWatcherService: FuseMediaWatcherService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Subscribe to media changes - this._fuseMediaWatcherService.onMediaChange$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe(({matchingAliases}) => { - - // Set the drawerMode and drawerOpened - if ( matchingAliases.includes('lg') ) - { - this.drawerMode = 'side'; - this.drawerOpened = true; - } - else - { - this.drawerMode = 'over'; - this.drawerOpened = false; - } - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } -} diff --git a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-2/content-scroll/left-sidebar-2.component.html b/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-2/content-scroll/left-sidebar-2.component.html deleted file mode 100644 index 466a91f8..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-2/content-scroll/left-sidebar-2.component.html +++ /dev/null @@ -1,81 +0,0 @@ -
- - - - - - - - - - - - - -
-
- -
- - -
- -
-

- Page heading -

-
-
- -
- -
-
- - -
- - -
- -
- -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-2/content-scroll/left-sidebar-2.component.ts b/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-2/content-scroll/left-sidebar-2.component.ts deleted file mode 100644 index 0a018845..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-2/content-scroll/left-sidebar-2.component.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import { FuseMediaWatcherService } from '@fuse/services/media-watcher'; - -@Component({ - selector : 'simple-left-sidebar-2-content-scroll', - templateUrl : './left-sidebar-2.component.html', - encapsulation: ViewEncapsulation.None -}) -export class SimpleLeftSidebar2ContentScrollComponent implements OnInit, OnDestroy -{ - drawerMode: 'over' | 'side' = 'side'; - drawerOpened: boolean = true; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor(private _fuseMediaWatcherService: FuseMediaWatcherService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Subscribe to media changes - this._fuseMediaWatcherService.onMediaChange$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe(({matchingAliases}) => { - - // Set the drawerMode and drawerOpened - if ( matchingAliases.includes('lg') ) - { - this.drawerMode = 'side'; - this.drawerOpened = true; - } - else - { - this.drawerMode = 'over'; - this.drawerOpened = false; - } - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } -} diff --git a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-2/inner-scroll/left-sidebar-2.component.html b/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-2/inner-scroll/left-sidebar-2.component.html deleted file mode 100644 index c48035f9..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-2/inner-scroll/left-sidebar-2.component.html +++ /dev/null @@ -1,83 +0,0 @@ -
- - - - - - - - - - - - - -
-
- -
- - -
- -
-

- Page heading -

-
-
- -
- -
-
- - -
- - -
- -
- -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-2/inner-scroll/left-sidebar-2.component.ts b/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-2/inner-scroll/left-sidebar-2.component.ts deleted file mode 100644 index 20fa4458..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-2/inner-scroll/left-sidebar-2.component.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import { FuseMediaWatcherService } from '@fuse/services/media-watcher'; - -@Component({ - selector : 'simple-left-sidebar-2-inner-scroll', - templateUrl : './left-sidebar-2.component.html', - encapsulation: ViewEncapsulation.None -}) -export class SimpleLeftSidebar2InnerScrollComponent implements OnInit, OnDestroy -{ - drawerMode: 'over' | 'side' = 'side'; - drawerOpened: boolean = true; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor(private _fuseMediaWatcherService: FuseMediaWatcherService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Subscribe to media changes - this._fuseMediaWatcherService.onMediaChange$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe(({matchingAliases}) => { - - // Set the drawerMode and drawerOpened - if ( matchingAliases.includes('lg') ) - { - this.drawerMode = 'side'; - this.drawerOpened = true; - } - else - { - this.drawerMode = 'over'; - this.drawerOpened = false; - } - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } -} diff --git a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-2/normal-scroll/left-sidebar-2.component.html b/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-2/normal-scroll/left-sidebar-2.component.html deleted file mode 100644 index f78440ad..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-2/normal-scroll/left-sidebar-2.component.html +++ /dev/null @@ -1,81 +0,0 @@ -
- - - - - - - - - - - - - -
-
- -
- - -
- -
-

- Page heading -

-
-
- -
- -
-
- - -
- - -
- -
- -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-2/normal-scroll/left-sidebar-2.component.ts b/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-2/normal-scroll/left-sidebar-2.component.ts deleted file mode 100644 index fbb92de7..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-2/normal-scroll/left-sidebar-2.component.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import { FuseMediaWatcherService } from '@fuse/services/media-watcher'; - -@Component({ - selector : 'simple-left-sidebar-2-normal-scroll', - templateUrl : './left-sidebar-2.component.html', - encapsulation: ViewEncapsulation.None -}) -export class SimpleLeftSidebar2NormalScrollComponent implements OnInit, OnDestroy -{ - drawerMode: 'over' | 'side' = 'side'; - drawerOpened: boolean = true; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor(private _fuseMediaWatcherService: FuseMediaWatcherService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Subscribe to media changes - this._fuseMediaWatcherService.onMediaChange$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe(({matchingAliases}) => { - - // Set the drawerMode and drawerOpened - if ( matchingAliases.includes('lg') ) - { - this.drawerMode = 'side'; - this.drawerOpened = true; - } - else - { - this.drawerMode = 'over'; - this.drawerOpened = false; - } - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } -} diff --git a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-2/page-scroll/left-sidebar-2.component.html b/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-2/page-scroll/left-sidebar-2.component.html deleted file mode 100644 index 76728c04..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-2/page-scroll/left-sidebar-2.component.html +++ /dev/null @@ -1,83 +0,0 @@ -
- - - - - - - - - - - - - -
-
- -
- - -
- -
-

- Page heading -

-
-
- -
- -
-
- - -
- - -
- -
- -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-2/page-scroll/left-sidebar-2.component.ts b/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-2/page-scroll/left-sidebar-2.component.ts deleted file mode 100644 index 3ee4ab15..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-2/page-scroll/left-sidebar-2.component.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import { FuseMediaWatcherService } from '@fuse/services/media-watcher'; - -@Component({ - selector : 'simple-left-sidebar-2-page-scroll', - templateUrl : './left-sidebar-2.component.html', - encapsulation: ViewEncapsulation.None -}) -export class SimpleLeftSidebar2PageScrollComponent implements OnInit, OnDestroy -{ - drawerMode: 'over' | 'side' = 'side'; - drawerOpened: boolean = true; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor(private _fuseMediaWatcherService: FuseMediaWatcherService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Subscribe to media changes - this._fuseMediaWatcherService.onMediaChange$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe(({matchingAliases}) => { - - // Set the drawerMode and drawerOpened - if ( matchingAliases.includes('lg') ) - { - this.drawerMode = 'side'; - this.drawerOpened = true; - } - else - { - this.drawerMode = 'over'; - this.drawerOpened = false; - } - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } -} diff --git a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-3/content-scroll/left-sidebar-3.component.html b/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-3/content-scroll/left-sidebar-3.component.html deleted file mode 100644 index e336c5f1..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-3/content-scroll/left-sidebar-3.component.html +++ /dev/null @@ -1,81 +0,0 @@ -
- - -
-
- -
- - -
- -
-

- Page heading -

-
-
- -
- -
-
- - - - - - - - - - - - - -
- - -
- -
- -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-3/content-scroll/left-sidebar-3.component.ts b/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-3/content-scroll/left-sidebar-3.component.ts deleted file mode 100644 index 04d73986..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-3/content-scroll/left-sidebar-3.component.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import { FuseMediaWatcherService } from '@fuse/services/media-watcher'; - -@Component({ - selector : 'simple-left-sidebar-3-content-scroll', - templateUrl : './left-sidebar-3.component.html', - encapsulation: ViewEncapsulation.None -}) -export class SimpleLeftSidebar3ScrollComponent implements OnInit, OnDestroy -{ - drawerMode: 'over' | 'side' = 'side'; - drawerOpened: boolean = true; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor(private _fuseMediaWatcherService: FuseMediaWatcherService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Subscribe to media changes - this._fuseMediaWatcherService.onMediaChange$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe(({matchingAliases}) => { - - // Set the drawerMode and drawerOpened if - if ( matchingAliases.includes('lg') ) - { - this.drawerMode = 'side'; - this.drawerOpened = true; - } - else - { - this.drawerMode = 'over'; - this.drawerOpened = false; - } - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } -} diff --git a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-3/normal-scroll/left-sidebar-3.component.html b/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-3/normal-scroll/left-sidebar-3.component.html deleted file mode 100644 index d52f47e9..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-3/normal-scroll/left-sidebar-3.component.html +++ /dev/null @@ -1,81 +0,0 @@ -
- - -
-
- -
- - -
- -
-

- Page heading -

-
-
- -
- -
-
- - - - - - - - - - - - - -
- - -
- -
- -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-3/normal-scroll/left-sidebar-3.component.ts b/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-3/normal-scroll/left-sidebar-3.component.ts deleted file mode 100644 index 9f9a729c..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-3/normal-scroll/left-sidebar-3.component.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import { FuseMediaWatcherService } from '@fuse/services/media-watcher'; - -@Component({ - selector : 'simple-left-sidebar-3-normal-scroll', - templateUrl : './left-sidebar-3.component.html', - encapsulation: ViewEncapsulation.None -}) -export class SimpleLeftSidebar3NormalScrollComponent implements OnInit, OnDestroy -{ - drawerMode: 'over' | 'side' = 'side'; - drawerOpened: boolean = true; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor(private _fuseMediaWatcherService: FuseMediaWatcherService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Subscribe to media changes - this._fuseMediaWatcherService.onMediaChange$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe(({matchingAliases}) => { - - // Set the drawerMode and drawerOpened if - if ( matchingAliases.includes('lg') ) - { - this.drawerMode = 'side'; - this.drawerOpened = true; - } - else - { - this.drawerMode = 'over'; - this.drawerOpened = false; - } - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } -} diff --git a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-3/page-scroll/left-sidebar-3.component.html b/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-3/page-scroll/left-sidebar-3.component.html deleted file mode 100644 index ab94871d..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-3/page-scroll/left-sidebar-3.component.html +++ /dev/null @@ -1,83 +0,0 @@ -
- - -
-
- -
- - -
- -
-

- Page heading -

-
-
- -
- -
-
- - - - - - - - - - - - - -
- - -
- -
- -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-3/page-scroll/left-sidebar-3.component.ts b/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-3/page-scroll/left-sidebar-3.component.ts deleted file mode 100644 index 3e7c97bd..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/left-sidebar-3/page-scroll/left-sidebar-3.component.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import { FuseMediaWatcherService } from '@fuse/services/media-watcher'; - -@Component({ - selector : 'simple-left-sidebar-3-page-scroll', - templateUrl : './left-sidebar-3.component.html', - encapsulation: ViewEncapsulation.None -}) -export class SimpleLeftSidebar3PageScrollComponent implements OnInit, OnDestroy -{ - drawerMode: 'over' | 'side' = 'side'; - drawerOpened: boolean = true; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor(private _fuseMediaWatcherService: FuseMediaWatcherService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Subscribe to media changes - this._fuseMediaWatcherService.onMediaChange$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe(({matchingAliases}) => { - - // Set the drawerMode and drawerOpened if - if ( matchingAliases.includes('lg') ) - { - this.drawerMode = 'side'; - this.drawerOpened = true; - } - else - { - this.drawerMode = 'over'; - this.drawerOpened = false; - } - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } -} diff --git a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-1/content-scroll/right-sidebar-1.component.html b/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-1/content-scroll/right-sidebar-1.component.html deleted file mode 100644 index b489149c..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-1/content-scroll/right-sidebar-1.component.html +++ /dev/null @@ -1,40 +0,0 @@ -
- - - - - - - - - - - - - -
- - - - - -
- -
- -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-1/content-scroll/right-sidebar-1.component.ts b/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-1/content-scroll/right-sidebar-1.component.ts deleted file mode 100644 index b4035965..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-1/content-scroll/right-sidebar-1.component.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import { FuseMediaWatcherService } from '@fuse/services/media-watcher'; - -@Component({ - selector : 'simple-right-sidebar-1-content-scroll', - templateUrl : './right-sidebar-1.component.html', - encapsulation: ViewEncapsulation.None -}) -export class SimpleRightSidebar1ContentScrollComponent implements OnInit, OnDestroy -{ - drawerMode: 'over' | 'side' = 'side'; - drawerOpened: boolean = true; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor(private _fuseMediaWatcherService: FuseMediaWatcherService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Subscribe to media changes - this._fuseMediaWatcherService.onMediaChange$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe(({matchingAliases}) => { - - // Set the drawerMode and drawerOpened - if ( matchingAliases.includes('lg') ) - { - this.drawerMode = 'side'; - this.drawerOpened = true; - } - else - { - this.drawerMode = 'over'; - this.drawerOpened = false; - } - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } -} diff --git a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-1/normal-scroll/right-sidebar-1.component.html b/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-1/normal-scroll/right-sidebar-1.component.html deleted file mode 100644 index 7d06881d..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-1/normal-scroll/right-sidebar-1.component.html +++ /dev/null @@ -1,40 +0,0 @@ -
- - - - - - - - - - - - - -
- - - - - -
- -
- -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-1/normal-scroll/right-sidebar-1.component.ts b/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-1/normal-scroll/right-sidebar-1.component.ts deleted file mode 100644 index 067ea8ee..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-1/normal-scroll/right-sidebar-1.component.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import { FuseMediaWatcherService } from '@fuse/services/media-watcher'; - -@Component({ - selector : 'simple-right-sidebar-1-normal-scroll', - templateUrl : './right-sidebar-1.component.html', - encapsulation: ViewEncapsulation.None -}) -export class SimpleRightSidebar1NormalScrollComponent implements OnInit, OnDestroy -{ - drawerMode: 'over' | 'side' = 'side'; - drawerOpened: boolean = true; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor(private _fuseMediaWatcherService: FuseMediaWatcherService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Subscribe to media changes - this._fuseMediaWatcherService.onMediaChange$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe(({matchingAliases}) => { - - // Set the drawerMode and drawerOpened - if ( matchingAliases.includes('lg') ) - { - this.drawerMode = 'side'; - this.drawerOpened = true; - } - else - { - this.drawerMode = 'over'; - this.drawerOpened = false; - } - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } -} diff --git a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-1/page-scroll/right-sidebar-1.component.html b/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-1/page-scroll/right-sidebar-1.component.html deleted file mode 100644 index be98cd72..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-1/page-scroll/right-sidebar-1.component.html +++ /dev/null @@ -1,42 +0,0 @@ -
- - - - - - - - - - - - - -
- - - - - -
- -
- -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-1/page-scroll/right-sidebar-1.component.ts b/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-1/page-scroll/right-sidebar-1.component.ts deleted file mode 100644 index 47ce7140..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-1/page-scroll/right-sidebar-1.component.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import { FuseMediaWatcherService } from '@fuse/services/media-watcher'; - -@Component({ - selector : 'simple-right-sidebar-1-page-scroll', - templateUrl : './right-sidebar-1.component.html', - encapsulation: ViewEncapsulation.None -}) -export class SimpleRightSidebar1PageScrollComponent implements OnInit, OnDestroy -{ - drawerMode: 'over' | 'side' = 'side'; - drawerOpened: boolean = true; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor(private _fuseMediaWatcherService: FuseMediaWatcherService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Subscribe to media changes - this._fuseMediaWatcherService.onMediaChange$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe(({matchingAliases}) => { - - // Set the drawerMode and drawerOpened - if ( matchingAliases.includes('lg') ) - { - this.drawerMode = 'side'; - this.drawerOpened = true; - } - else - { - this.drawerMode = 'over'; - this.drawerOpened = false; - } - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } -} diff --git a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-2/content-scroll/right-sidebar-2.component.html b/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-2/content-scroll/right-sidebar-2.component.html deleted file mode 100644 index a01a3e04..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-2/content-scroll/right-sidebar-2.component.html +++ /dev/null @@ -1,82 +0,0 @@ -
- - - - - - - - - - - - - -
-
- -
- - -
- -
-

- Page heading -

-
-
- -
- -
-
- - -
- - -
- -
- -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-2/content-scroll/right-sidebar-2.component.ts b/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-2/content-scroll/right-sidebar-2.component.ts deleted file mode 100644 index 392d4651..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-2/content-scroll/right-sidebar-2.component.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import { FuseMediaWatcherService } from '@fuse/services/media-watcher'; - -@Component({ - selector : 'simple-right-sidebar-2-content-scroll', - templateUrl : './right-sidebar-2.component.html', - encapsulation: ViewEncapsulation.None -}) -export class SimpleRightSidebar2ContentScrollComponent implements OnInit, OnDestroy -{ - drawerMode: 'over' | 'side' = 'side'; - drawerOpened: boolean = true; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor(private _fuseMediaWatcherService: FuseMediaWatcherService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Subscribe to media changes - this._fuseMediaWatcherService.onMediaChange$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe(({matchingAliases}) => { - - // Set the drawerMode and drawerOpened - if ( matchingAliases.includes('lg') ) - { - this.drawerMode = 'side'; - this.drawerOpened = true; - } - else - { - this.drawerMode = 'over'; - this.drawerOpened = false; - } - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } -} diff --git a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-2/inner-scroll/right-sidebar-2.component.html b/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-2/inner-scroll/right-sidebar-2.component.html deleted file mode 100644 index a7e07b35..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-2/inner-scroll/right-sidebar-2.component.html +++ /dev/null @@ -1,84 +0,0 @@ -
- - - - - - - - - - - - - -
-
- -
- - -
- -
-

- Page heading -

-
-
- -
- -
-
- - -
- - -
- -
- -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-2/inner-scroll/right-sidebar-2.component.ts b/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-2/inner-scroll/right-sidebar-2.component.ts deleted file mode 100644 index e1f8949c..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-2/inner-scroll/right-sidebar-2.component.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import { FuseMediaWatcherService } from '@fuse/services/media-watcher'; - -@Component({ - selector : 'simple-right-sidebar-2-inner-scroll', - templateUrl : './right-sidebar-2.component.html', - encapsulation: ViewEncapsulation.None -}) -export class SimpleRightSidebar2InnerScrollComponent implements OnInit, OnDestroy -{ - drawerMode: 'over' | 'side' = 'side'; - drawerOpened: boolean = true; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor(private _fuseMediaWatcherService: FuseMediaWatcherService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Subscribe to media changes - this._fuseMediaWatcherService.onMediaChange$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe(({matchingAliases}) => { - - // Set the drawerMode and drawerOpened - if ( matchingAliases.includes('lg') ) - { - this.drawerMode = 'side'; - this.drawerOpened = true; - } - else - { - this.drawerMode = 'over'; - this.drawerOpened = false; - } - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } -} diff --git a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-2/normal-scroll/right-sidebar-2.component.html b/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-2/normal-scroll/right-sidebar-2.component.html deleted file mode 100644 index 84ace526..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-2/normal-scroll/right-sidebar-2.component.html +++ /dev/null @@ -1,82 +0,0 @@ -
- - - - - - - - - - - - - -
-
- -
- - -
- -
-

- Page heading -

-
-
- -
- -
-
- - -
- - -
- -
- -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-2/normal-scroll/right-sidebar-2.component.ts b/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-2/normal-scroll/right-sidebar-2.component.ts deleted file mode 100644 index 84b9a32e..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-2/normal-scroll/right-sidebar-2.component.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import { FuseMediaWatcherService } from '@fuse/services/media-watcher'; - -@Component({ - selector : 'simple-right-sidebar-2-normal-scroll', - templateUrl : './right-sidebar-2.component.html', - encapsulation: ViewEncapsulation.None -}) -export class SimpleRightSidebar2NormalScrollComponent implements OnInit, OnDestroy -{ - drawerMode: 'over' | 'side' = 'side'; - drawerOpened: boolean = true; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor(private _fuseMediaWatcherService: FuseMediaWatcherService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Subscribe to media changes - this._fuseMediaWatcherService.onMediaChange$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe(({matchingAliases}) => { - - // Set the drawerMode and drawerOpened - if ( matchingAliases.includes('lg') ) - { - this.drawerMode = 'side'; - this.drawerOpened = true; - } - else - { - this.drawerMode = 'over'; - this.drawerOpened = false; - } - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } -} diff --git a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-2/page-scroll/right-sidebar-2.component.html b/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-2/page-scroll/right-sidebar-2.component.html deleted file mode 100644 index 2d1883ea..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-2/page-scroll/right-sidebar-2.component.html +++ /dev/null @@ -1,84 +0,0 @@ -
- - - - - - - - - - - - - -
-
- -
- - -
- -
-

- Page heading -

-
-
- -
- -
-
- - -
- - -
- -
- -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-2/page-scroll/right-sidebar-2.component.ts b/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-2/page-scroll/right-sidebar-2.component.ts deleted file mode 100644 index 1af6bfe5..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-2/page-scroll/right-sidebar-2.component.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import { FuseMediaWatcherService } from '@fuse/services/media-watcher'; - -@Component({ - selector : 'simple-right-sidebar-2-page-scroll', - templateUrl : './right-sidebar-2.component.html', - encapsulation: ViewEncapsulation.None -}) -export class SimpleRightSidebar2PageScrollComponent implements OnInit, OnDestroy -{ - drawerMode: 'over' | 'side' = 'side'; - drawerOpened: boolean = true; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor(private _fuseMediaWatcherService: FuseMediaWatcherService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Subscribe to media changes - this._fuseMediaWatcherService.onMediaChange$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe(({matchingAliases}) => { - - // Set the drawerMode and drawerOpened - if ( matchingAliases.includes('lg') ) - { - this.drawerMode = 'side'; - this.drawerOpened = true; - } - else - { - this.drawerMode = 'over'; - this.drawerOpened = false; - } - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } -} diff --git a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-3/content-scroll/right-sidebar-3.component.html b/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-3/content-scroll/right-sidebar-3.component.html deleted file mode 100644 index 60b7bebb..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-3/content-scroll/right-sidebar-3.component.html +++ /dev/null @@ -1,82 +0,0 @@ -
- - -
-
- -
- - -
- -
-

- Page heading -

-
-
- -
- -
-
- - - - - - - - - - - - - -
- - -
- -
- -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-3/content-scroll/right-sidebar-3.component.ts b/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-3/content-scroll/right-sidebar-3.component.ts deleted file mode 100644 index a0721d1d..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-3/content-scroll/right-sidebar-3.component.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import { FuseMediaWatcherService } from '@fuse/services/media-watcher'; - -@Component({ - selector : 'simple-right-sidebar-3-content-scroll', - templateUrl : './right-sidebar-3.component.html', - encapsulation: ViewEncapsulation.None -}) -export class SimpleRightSidebar3ContentScrollComponent implements OnInit, OnDestroy -{ - drawerMode: 'over' | 'side' = 'side'; - drawerOpened: boolean = true; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor(private _fuseMediaWatcherService: FuseMediaWatcherService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Subscribe to media changes - this._fuseMediaWatcherService.onMediaChange$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe(({matchingAliases}) => { - - // Set the drawerMode and drawerOpened if - if ( matchingAliases.includes('lg') ) - { - this.drawerMode = 'side'; - this.drawerOpened = true; - } - else - { - this.drawerMode = 'over'; - this.drawerOpened = false; - } - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } -} diff --git a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-3/normal-scroll/right-sidebar-3.component.html b/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-3/normal-scroll/right-sidebar-3.component.html deleted file mode 100644 index 99c879c7..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-3/normal-scroll/right-sidebar-3.component.html +++ /dev/null @@ -1,82 +0,0 @@ -
- - -
-
- -
- - -
- -
-

- Page heading -

-
-
- -
- -
-
- - - - - - - - - - - - - -
- - -
- -
- -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-3/normal-scroll/right-sidebar-3.component.ts b/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-3/normal-scroll/right-sidebar-3.component.ts deleted file mode 100644 index 3bc3a4ae..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-3/normal-scroll/right-sidebar-3.component.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import { FuseMediaWatcherService } from '@fuse/services/media-watcher'; - -@Component({ - selector : 'simple-right-sidebar-3-normal-scroll', - templateUrl : './right-sidebar-3.component.html', - encapsulation: ViewEncapsulation.None -}) -export class SimpleRightSidebar3NormalScrollComponent implements OnInit, OnDestroy -{ - drawerMode: 'over' | 'side' = 'side'; - drawerOpened: boolean = true; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor(private _fuseMediaWatcherService: FuseMediaWatcherService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Subscribe to media changes - this._fuseMediaWatcherService.onMediaChange$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe(({matchingAliases}) => { - - // Set the drawerMode and drawerOpened if - if ( matchingAliases.includes('lg') ) - { - this.drawerMode = 'side'; - this.drawerOpened = true; - } - else - { - this.drawerMode = 'over'; - this.drawerOpened = false; - } - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } -} diff --git a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-3/page-scroll/right-sidebar-3.component.html b/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-3/page-scroll/right-sidebar-3.component.html deleted file mode 100644 index 88063052..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-3/page-scroll/right-sidebar-3.component.html +++ /dev/null @@ -1,84 +0,0 @@ -
- - -
-
- -
- - -
- -
-

- Page heading -

-
-
- -
- -
-
- - - - - - - - - - - - - -
- - -
- -
- -
- -
- -
diff --git a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-3/page-scroll/right-sidebar-3.component.ts b/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-3/page-scroll/right-sidebar-3.component.ts deleted file mode 100644 index 1e33724f..00000000 --- a/src/app/modules/admin/ui/page-layouts/simple/right-sidebar-3/page-scroll/right-sidebar-3.component.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -import { FuseMediaWatcherService } from '@fuse/services/media-watcher'; - -@Component({ - selector : 'simple-right-sidebar-3-page-scroll', - templateUrl : './right-sidebar-3.component.html', - encapsulation: ViewEncapsulation.None -}) -export class SimpleRightSidebar3PageScrollComponent implements OnInit, OnDestroy -{ - drawerMode: 'over' | 'side' = 'side'; - drawerOpened: boolean = true; - private _unsubscribeAll: Subject = new Subject(); - - /** - * Constructor - */ - constructor(private _fuseMediaWatcherService: FuseMediaWatcherService) - { - } - - // ----------------------------------------------------------------------------------------------------- - // @ Lifecycle hooks - // ----------------------------------------------------------------------------------------------------- - - /** - * On init - */ - ngOnInit(): void - { - // Subscribe to media changes - this._fuseMediaWatcherService.onMediaChange$ - .pipe(takeUntil(this._unsubscribeAll)) - .subscribe(({matchingAliases}) => { - - // Set the drawerMode and drawerOpened if - if ( matchingAliases.includes('lg') ) - { - this.drawerMode = 'side'; - this.drawerOpened = true; - } - else - { - this.drawerMode = 'over'; - this.drawerOpened = false; - } - }); - } - - /** - * On destroy - */ - ngOnDestroy(): void - { - // Unsubscribe from all subscriptions - this._unsubscribeAll.next(); - this._unsubscribeAll.complete(); - } -} diff --git a/src/app/modules/admin/ui/tailwindcss/tailwindcss.component.html b/src/app/modules/admin/ui/tailwindcss/tailwindcss.component.html deleted file mode 100644 index 7b6098ac..00000000 --- a/src/app/modules/admin/ui/tailwindcss/tailwindcss.component.html +++ /dev/null @@ -1,50 +0,0 @@ -
- - -
-
- -
- -
- -
-

- TailwindCSS -

-
-
-
- - -
- -
- -

- As per the official page of Tailwind CSS, it is a highly customizable, low-level CSS framework that gives you all of the building blocks you need to build bespoke - designs without any annoying opinionated styles you have to fight to override. -

-

- To simply put, Tailwind provides helper classes for almost every CSS rule available. Fuse includes and uses Tailwind by default and it can be used in any part of - the theme. -

- -

Official docs

-

- Official Tailwind CSS documentation: - https://tailwindcss.com/ - -

- -
- -
- -
diff --git a/src/app/modules/admin/ui/tailwindcss/tailwindcss.component.ts b/src/app/modules/admin/ui/tailwindcss/tailwindcss.component.ts deleted file mode 100644 index c1e16d8c..00000000 --- a/src/app/modules/admin/ui/tailwindcss/tailwindcss.component.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; - -@Component({ - selector : 'tailwindcss', - templateUrl : './tailwindcss.component.html', - encapsulation: ViewEncapsulation.None -}) -export class TailwindCSSComponent -{ - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/ui/tailwindcss/tailwindcss.module.ts b/src/app/modules/admin/ui/tailwindcss/tailwindcss.module.ts deleted file mode 100644 index 418edbec..00000000 --- a/src/app/modules/admin/ui/tailwindcss/tailwindcss.module.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { NgModule } from '@angular/core'; -import { Route, RouterModule } from '@angular/router'; -import { SharedModule } from 'app/shared/shared.module'; -import { TailwindCSSComponent } from 'app/modules/admin/ui/tailwindcss/tailwindcss.component'; - -export const routes: Route[] = [ - { - path : '', - component: TailwindCSSComponent - } -]; - -@NgModule({ - declarations: [ - TailwindCSSComponent - ], - imports : [ - RouterModule.forChild(routes), - SharedModule - ] -}) -export class TailwindCSSModule -{ -} diff --git a/src/app/modules/admin/ui/typography/typography.component.html b/src/app/modules/admin/ui/typography/typography.component.html deleted file mode 100644 index 8db2e2a5..00000000 --- a/src/app/modules/admin/ui/typography/typography.component.html +++ /dev/null @@ -1,439 +0,0 @@ -
- - -
-
- -
- -
- -
-

- Typography -

-
-
-
- - -
- - -
-

Body font size

-

- The default body text is set to 14px. This allows building more complex and dense layouts without - needing too much screen space. Applications usually need to show a lot more information on one page compared to, - let's say, a blog post. This requires more denser layouts hence the smaller default body font size. -

- -

Rich text

-

- When building a web application, you don't want to have default HTML element styles interfering with your design. - This is because those style are designed for building web sites, therefore, Fuse takes advantage of Tailwind's reset - styles to reset all element styles by default. -

-

- This way, you can build complex layouts and application interfaces without needing to reset element styles over and - over again. -

-

- But this introduce a new problem when you actually want to show a rich-text content with paragraphs, - lists, links, titles and other HTML elements. They will look bad and they won't be properly styled. -

-

- To overcome this issue, Fuse uses - - Tailwind's Official Typography Plugin - -  which adds prose class to provide typographic defaults: -

- - - -

- Here's an example content that's been wrapped with the prose class: -

-
- -
- - -
- -

Typography Demo

-

- Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusamus aperiam lab et fugiat id magnam minus nemo quam - voluptatem. Culpa deleniti explica nisi quod soluta. -

-

- Alias animi labque, deserunt distinctio eum excepturi fuga iure labore magni molestias mollitia natus, officia pofro - quis sunt temporibus veritatis voluptatem, voluptatum. Aut blanditiis esse et illum maxim, obcaecati possimus - voluptate! Accusamus adipisci amet aperiam, assumenda consequuntur fugiat inventore iusto magnam molestias - natus necessitatibus, nulla pariatur. -

-

- Amet distinctio enim itaque minima minus nesciunt recusandae soluta voluptatibus: -

-
-

- Ad aliquid amet asperiores lab distinctio doloremque eaque, exercitationem explicabo, minus mollitia - natus necessitatibus odio omnis pofro rem. -

-
-

- Alias architecto asperiores, dignissimos illum ipsam ipsum itaque, natus necessitatibus officiis, perferendis quae - sed ullam veniam vitae voluptas! Magni, nisi, quis! A accusamus animi commodi, consectetur distinctio - eaque, eos excepturi illum laboriosam maiores nam natus nulla officiis perspiciatis rem reprehenderit sed - tenetur veritatis. -

-

- Consectetur dicta enim error eveniet expedita, facere in itaque labore natus quasi? Ad consectetur - eligendi facilis magni quae quis, quo temporibus voluptas voluptate voluptatem! -

-

- Adipisci alias animi debitis eos et impedit maiores, modi nam nobis officia optio perspiciatis, rerum. - Accusantium esse nostrum odit quis quo: -

- -
h1 a {{'{'}}
-    display: block;
-    width: 300px;
-    height: 80px;
-{{'}'}}
- -

- Accusantium aut autem, lab deleniti eaque fugiat fugit id ipsa iste molestiae, - necessitatibus nemo quasi - . -

-
-

- Accusantium aspernatur autem enim -

-

- Blanditiis, fugit voluptate! Assumenda blanditiis consectetur, labque cupiditate ducimus eaque earum, fugiat illum - ipsa, necessitatibus omnis quaerat reiciendis totam. Architecto, facere illum molestiae nihil nulla - quibusdam quidem vel! Atque blanditiis deserunt. -

-

- Debitis deserunt doloremque labore laboriosam magni minus odit: -

-
    -
  1. Asperiores dicta esse maiores nobis officiis.
  2. -
  3. Accusamus aliquid debitis dolore illo ipsam molettiae possimus.
  4. -
  5. Magnam mollitia pariatur perspiciatis quasi quidem tenetur voluptatem! Adipisci aspernatur assumenda dicta.
  6. -
-

- Animi fugit incidunt iure magni maiores molestias. -

-

- Consequatur iusto soluta -

-

- Aliquid asperiores corporis — deserunt dolorum ducimus eius eligendi explicabo quaerat suscipit voluptas. -

-

- Deserunt dolor eos et illum laborum magni molestiae mollitia: -

-
-

Autem beatae consectetur consequatur, facere, facilis fugiat id illo, impedit numquam optio quis sunt ducimus illo.

-
-

- Adipisci consequuntur doloribus facere in ipsam maxime molestias pofro quam: -

-
- -
- Accusamus blanditiis labque delectus esse et eum excepturi, impedit ipsam iste maiores minima mollitia, nihil obcaecati - placeat quaerat qui quidem sint unde! -
-
-

- A beatae lab deleniti explicabo id inventore magni nisi omnis placeat praesentium quibusdam: -

-
    -
  • Dolorem eaque laboriosam omnis praesentium.
  • -
  • Atque debitis delectus distinctio doloremque.
  • -
  • Fuga illo impedit minima mollitia neque obcaecati.
  • -
-

- Consequ eius eum excepturi explicabo. -

-

- Adipisicing elit atque impedit? -

-

- Atque distinctio doloremque ea qui quo, repellendus. -

-

- Delectus deserunt explicabo facilis numquam quasi! Laboriosam, magni, quisquam. Aut, blanditiis commodi distinctio, facere fuga - hic itaque iure labore laborum maxime nemo neque provident quos recusandae sequi veritatis illum inventore iure qui rerum sapiente. -

-

- Accusamus iusto sint aperiam consectetur … -

-

- Aliquid assumenda ipsa nam odit pofro quaerat, quasi recusandae sint! Aut, esse explicabo facilis fugit illum iure magni - necessitatibus odio quas. -

-
    -
  • -

    Dolore natus placeat rem atque dignissimos laboriosam.

    -

    - Amet repudiandae voluptates architecto dignissimos repellendus voluptas dignissimos eveniet itaque maiores natus. -

    -

    - Accusamus aliquam debitis delectus dolorem ducimus enim eos, exercitationem fugiat id iusto nostrum quae quos - recusandae reiciendis rerum sequi temporibus veniam vero? Accusantium culpa, cupiditate ducimus eveniet id maiores modi - mollitia nisi aliquid dolorum ducimus et illo in. -

    -
  • -
  • -

    Ab amet deleniti dolor, et hic optio placeat.

    -

    - Accusantium ad alias beatae, consequatur consequuntur eos error eveniet expedita fuga laborum libero maxime nulla pofro - praesentium rem rerum saepe soluta ullam vero, voluptas? Architecto at debitis, doloribus harum iure libero natus odio - optio soluta veritatis voluptate. -

    -
  • -
  • -

    At aut consectetur nam necessitatibus neque nesciunt.

    -

    - Aut dignissimos labore nobis nostrum optio! Dolor id minima velit voluptatibus. Aut consequuntur eum exercitationem - fuga, harum id impedit molestiae natus neque numquam perspiciatis quam rem voluptatum. -

    -
  • -
-

- Animi aperiam autem labque dolore enim ex expedita harum hic id impedit ipsa laborum modi mollitia non perspiciatis quae ratione. -

-

- Alias eos excepturi facilis fugit. -

-

- Alias asperiores, aspernatur corporis - delectus - est - facilis - inventore dolore - ipsa nobis nostrum officia quia, veritatis vero! At dolore est nesciunt numquam quam. Ab animi architecto aut, dignissimos - eos est eum explicabo. -

-

- Adipisci autem consequuntur labque cupiditate dolor ducimus fuga neque nesciunt: -

- -
module.exports = {{'{'}}
-    purge: [],
-    theme: {{'{'}}
-        extend: {{'{}'}},
-    },
-    variants: {{'{}'}},
-    plugins: [],
-{{'}'}}
- -

- Aliquid aspernatur eius fugit hic iusto. -

-

- Dolorum ducimus expedita? -

-

- Culpa debitis explicabo maxime minus quaerat reprehenderit temporibus! Asperiores, cupiditate ducimus esse est expedita fuga hic - ipsam necessitatibus placeat possimus? Amet animi aut consequuntur earum eveniet. -

-
    -
  1. - Aspernatur at beatae corporis debitis. -
      -
    • - Aperiam assumenda commodi lab dicta eius, “fugit ipsam“ itaque iure molestiae nihil numquam, officia omnis quia - repellendus sapiente sed. -
    • -
    • - Nulla odio quod saepe accusantium, adipisci autem blanditiis lab doloribus. -
    • -
    • - Explicabo facilis iusto molestiae nisi nostrum obcaecati officia. -
    • -
    -
  2. -
  3. - Nobis odio officiis optio quae quis quisquam quos rem. -
      -
    • Modi pariatur quod totam. Deserunt doloribus eveniet, expedita.
    • -
    • Ad beatae dicta et fugit libero optio quaerat rem repellendus./
    • -
    • Architecto atque consequuntur corporis id iste magni.
    • -
    -
  4. -
  5. - Deserunt non placeat unde veniam veritatis? Odio quod. -
      -
    • Inventore iure magni quod repellendus tempora. Magnam neque, quia. Adipisci amet.
    • -
    • Consectetur adipisicing elit.
    • -
    • labque eum expedita illo inventore iusto laboriosam nesciunt non, odio provident.
    • -
    -
  6. -
-

- A aliquam architecto consequatur labque dicta doloremque <li> doloribus, ducimus earum, est <p> - eveniet explicabo fuga fugit ipsum minima minus molestias nihil nisi non qui sunt vel voluptatibus? A dolorum illum nihil quidem. -

-
    -
  • -

    - Laboriosam nesciunt obcaecati optio qui. -

    -

    - Doloremque magni molestias reprehenderit. -

    -
      -
    • Accusamus aperiam blanditiis <p> commodi
    • -
    • Dolorum ea explicabo fugiat in ipsum
    • -
    -
  • -
  • -

    - Commodi dolor dolorem dolores eum expedita libero. -

    -

    - Accusamus alias consectetur dolores et, excepturi fuga iusto possimus. -

    -
      -
    • -

      - Accusantium ad alias atque aut autem consequuntur deserunt dignissimos eaque iure <p> maxime. -

      -

      - Dolorum in nisi numquam omnis quam sapiente sit vero. -

      -
    • -
    • -

      - Adipisci lab in nisi odit soluta sunt vitae commodi excepturi. -

      -
    • -
    -
  • -
  • -

    - Assumenda deserunt distinctio dolor iste mollitia nihil non? -

    -
  • -
-

- Consectetur adipisicing elit dicta dolor iste. -

-

- Consectetur ea natus officia omnis reprehenderit. -

-

- Distinctio impedit quaerat sed! Accusamus - aliquam aspernatur enim expedita explicabo - . Libero molestiae - odio quasi unde ut? Ab exercitationem id numquam odio quisquam! -

-

- Explicabo facilis nemo quidem natus tempore: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
WrestlerOriginFinisher
Bret “The Hitman” HartCalgary, ABSharpshooter
Stone Cold Steve AustinAustin, TXStone Cold Stunner
Randy SavageSarasota, FLElbow Drop
VaderBoulder, COVader Bomb
Razor RamonChuluota, FLRazor’s Edge
-

- A aliquid autem lab doloremque, ea earum eum fuga fugit illo ipsa minus natus nisi <span> obcaecati pariatur - perferendis pofro suscipit tempore. -

-

- Ad alias atque culpa illum earum optio -

-

- Architecto consequatur eveniet illo in iure laborum minus omnis quibusdam sequi temporibus? Ab aliquid “atque dolores molestiae - nemo perferendis” reprehenderit saepe. -

-

- Accusantium aliquid eligendi est fuga natus, quos vel? Adipisci aperiam asperiores aspernatur consectetur cupiditate - @distinctio/doloribus - et exercitationem expedita, facere facilis illum, impedit inventore - ipsa iure iusto magnam, magni minus nesciunt non officia possimus quod reiciendis. -

-

- Cupiditate explicabo hic maiores -

-

- Aliquam amet consequuntur distinctio ea est excepturi facere illum maiores nisi nobis non odit officiis - quisquam, similique tempora temporibus, tenetur ullam voluptates adipisci aperiam deleniti doloremque - ducimus eos. -

-

- Ducimus qui quo tempora. lab enim explicabo hic inventore qui soluta voluptates voluptatum? Asperiores consectetur - delectus dolorem fugiat ipsa pariatur, quas quos repellendus repudiandae sunt aut blanditiis. -

-

- Asperiores aspernatur autem error praesentium quidem. -

-

- Ad blanditiis commodi, doloribus id iste repudiandae vero vitae. -

-

- Atque consectetur lab debitis enim est et, facere fugit impedit, possimus quaerat quibusdam. -

-

- Dolorem nihil placeat quibusdam veniam? Amet architecto at consequatur eligendi eveniet excepturi hic illo impedit in iste magni maxime - modi nisi nulla odio placeat quidem, quos rem repellat similique suscipit voluptate voluptates nobis omnis quo repellendus. -

-

- Assumenda, eum, minima! Autem consectetur fugiat iste sit! Nobis omnis quo repellendus. -

- -
- -
- -
diff --git a/src/app/modules/admin/ui/typography/typography.component.ts b/src/app/modules/admin/ui/typography/typography.component.ts deleted file mode 100644 index b98de741..00000000 --- a/src/app/modules/admin/ui/typography/typography.component.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; - -@Component({ - selector : 'typography', - templateUrl : './typography.component.html', - encapsulation: ViewEncapsulation.None -}) -export class TypographyComponent -{ - /** - * Constructor - */ - constructor() - { - } -} diff --git a/src/app/modules/admin/ui/typography/typography.module.ts b/src/app/modules/admin/ui/typography/typography.module.ts deleted file mode 100644 index 086c1163..00000000 --- a/src/app/modules/admin/ui/typography/typography.module.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { NgModule } from '@angular/core'; -import { Route, RouterModule } from '@angular/router'; -import { MatTabsModule } from '@angular/material/tabs'; -import { FuseHighlightModule } from '@fuse/components/highlight'; -import { SharedModule } from 'app/shared/shared.module'; -import { TypographyComponent } from 'app/modules/admin/ui/typography/typography.component'; - -export const routes: Route[] = [ - { - path : '', - component: TypographyComponent - } -]; - -@NgModule({ - declarations: [ - TypographyComponent - ], - imports : [ - RouterModule.forChild(routes), - MatTabsModule, - FuseHighlightModule, - SharedModule - ] -}) -export class TypographyModule -{ -} diff --git a/src/app/modules/landing/home/home.component.html b/src/app/modules/landing/home/home.component.html index 19ac9664..5cb8580a 100644 --- a/src/app/modules/landing/home/home.component.html +++ b/src/app/modules/landing/home/home.component.html @@ -18,9 +18,9 @@