File

src/app/features/email-client/email-client.module.ts

import { NgModule, inject } from "@angular/core";
import { CommonModule } from "@angular/common";
import { EntityActionsMenuService } from "../../core/entity-details/entity-actions-menu/entity-actions-menu.service";
import { Entity } from "../../core/entity/model/entity";
import { EmailClientService } from "./email-client.service";
import { EmailDatatype } from "#src/app/core/basic-datatypes/string/email.datatype";
import { AdminOverviewService } from "#src/app/core/admin/admin-overview/admin-overview.service";
import { EmailTemplate } from "./email-template.entity";
import { RouterService } from "#src/app/core/config/dynamic-routing/router.service";
import { EntityDetailsConfig } from "#src/app/core/entity-details/EntityDetailsConfig";
import { ViewConfig } from "#src/app/core/config/dynamic-routing/view-config.interface";
import { EntityListConfig } from "#src/app/core/entity-list/EntityListConfig";

@NgModule({
  imports: [CommonModule],
})
export class EmailClientServiceModule {
  constructor() {
    const entityActionsMenuService = inject(EntityActionsMenuService);
    const emailClientService = inject(EmailClientService);
    const adminOverviewService = inject(AdminOverviewService);
    const routerService = inject(RouterService);

    routerService.addRoutes(viewConfigs);

    entityActionsMenuService.registerActions([
      {
        action: "send-email",
        label: $localize`:entity context menu:Send Email`,
        icon: "envelope",
        permission: "read",
        execute: async (e: Entity) => emailClientService.executeMailto(e),
        visible: async (entity) => {
          // Only show if there is at least one email field in the schema
          const schema = entity.getConstructor().schema;
          for (const [, field] of schema.entries()) {
            if (field.dataType === EmailDatatype.dataType) {
              return true;
            }
          }
          return false;
        },
      },
    ]);

    adminOverviewService.menuItems.push({
      label: $localize`:admin menu item:Manage Email Templates`,
      link: EmailTemplate.route,
    });
  }
}

const viewConfigs: ViewConfig[] = [
  {
    _id: "view:" + EmailTemplate.route,
    component: "EntityList",
    config: {
      entityType: EmailTemplate.ENTITY_TYPE,
      columns: ["subject", "body", "availableForEntityTypes", "category"],
    } as EntityListConfig,
  },

  // Details View
  {
    _id: "view:" + EmailTemplate.route + "/:id",
    component: "EntityDetails",
    config: {
      entityType: EmailTemplate.ENTITY_TYPE,
      panels: [
        {
          components: [
            {
              component: "Form",
              config: {
                fieldGroups: [
                  {
                    fields: ["subject", "body"],
                  },
                  {
                    fields: ["availableForEntityTypes", "category"],
                  },
                ],
              },
            },
          ],
        },
      ],
    } as EntityDetailsConfig,
  },
];

results matching ""

    No results matching ""