Jobs UI Plugins

The Jobs plugin system provides the frontend for job management in Ever Gauzy. It uses a parent-child plugin group architecture where JobsPlugin is the parent and child plugins contribute individual tabs and pages.

Architecture

Diagram; its source is available below
Diagram source
graph TD
    JP["JobsPlugin (parent)"]
    JE["JobEmployeePlugin"]
    JS["JobSearchPlugin"]
    JM["JobMatchingPlugin"]
    JPR["JobProposalPlugin"]
    JPT["JobProposalTemplatePlugin"]

    JP --> JE
    JP --> JS
    JP --> JM
    JP --> JPT
    JPR -.->|"sales-sections"| Sales["Sales Section"]

    style JP fill:#4CAF50,color:#fff
    style JPR fill:#FF9800,color:#fff

Plugin Group Overview

PluginTab / PageURLPermission
JobsPluginJobs (parent layout)/pages/jobsFEATURE_JOB
JobEmployeePluginEmployee tab/pages/jobs/employeeORG_JOB_EMPLOYEE_VIEW
JobSearchPluginBrowse tab/pages/jobs/searchORG_JOB_SEARCH
JobMatchingPluginMatching tab/pages/jobs/matchingORG_JOB_MATCHING_VIEW
JobProposalTemplatePluginProposal Template tab/pages/jobs/proposal-templateORG_PROPOSAL_TEMPLATES_VIEW
JobProposalPluginProposals page (Sales)/pages/sales/proposalsORG_PROPOSALS_VIEW
Note

JobProposalPlugin registers under sales-sections (not jobs-sections), so it appears in the Sales menu rather than the Jobs menu. It is still passed as a child in plugin-ui.config.ts for organizational purposes.

Registration

All Jobs plugins are registered together via the .init() pattern in plugin-ui.config.ts:

// apps/gauzy/src/plugin-ui.config.ts
import { JobsPlugin } from '@gauzy/plugin-jobs-ui';
import { JobProposalPlugin, JobProposalTemplatePlugin } from '@gauzy/plugin-job-proposal-ui';
import { JobEmployeePlugin } from '@gauzy/plugin-job-employee-ui';
import { JobSearchPlugin } from '@gauzy/plugin-job-search-ui';
import { JobMatchingPlugin } from '@gauzy/plugin-job-matching-ui';

export const uiPluginConfig: PluginUiConfig = {
  plugins: [
    JobsPlugin.init({
      plugins: [
        JobProposalPlugin,
        JobEmployeePlugin,
        JobSearchPlugin,
        JobMatchingPlugin,
        JobProposalTemplatePlugin
      ]
    }),
    // ...
  ]
};

The .init() method lets each deployment choose which child plugins to include. Omit a child to disable that tab.


JobsPlugin (Parent)

PropertyValue
Plugin IDjobs
Package@gauzy/plugin-jobs-ui
Version1.0.0
Locationpage-sections
Feature KeyFEATURE_JOB
TypeModule-based plugin group

Plugin Definition

export interface JobsPluginDefinition extends PluginUiDefinition {
  init(opts: { plugins: PluginUiDefinition[] }): PluginUiDefinition;
}

export const JobsPlugin: JobsPluginDefinition = {
  id: 'jobs',
  version: '1.0.0',
  location: 'page-sections',
  module: JobsModule,
  routes: [JOBS_PAGE_ROUTE as PluginRouteInput],
  navMenu: [{
    type: 'config',
    config: {
      id: 'jobs',
      title: 'Jobs',
      icon: 'fas fa-briefcase',
      link: '/pages/jobs',
      data: {
        translationKey: 'MENU.JOBS',
        featureKey: FeatureEnum.FEATURE_JOB
      },
      items: []
    },
    before: 'employees'
  }],
  featureKey: FeatureEnum.FEATURE_JOB,
  plugins: [],

  init(opts: { plugins: PluginUiDefinition[] }): PluginUiDefinition {
    return { ...JobsPlugin, plugins: opts.plugins };
  }
};

Adds a Jobs menu item to the sidebar, positioned before "Employees", with the briefcase icon. Only visible when the FEATURE_JOB feature flag is enabled.

Route Structure

/pages/jobs
  └── JobLayoutComponent (tabset wrapper)
      ├── /employee       → JobEmployeePlugin
      ├── /search         → JobSearchPlugin
      ├── /matching       → JobMatchingPlugin
      └── /proposal-template → JobProposalTemplatePlugin

Default redirect: /pages/jobs → /pages/jobs/employee

Child Plugins

Each child plugin is documented on its own page:

Edit this page

Copyright © 2023-Present Ever Co. LTD.Docs by Sourcey