@acorex-platform/extension-project-management-jira-client 0.0.56 → 0.0.58

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,6 +5,7 @@ import { AXPLayoutBuilderService, resolveLayoutBuilderDialogResult } from '@acor
5
5
  import { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';
6
6
  import { AXPCommandService } from '@acorex-platform/framework-client/runtime';
7
7
  import { AXPopupService } from '@acorex/components/popup';
8
+ import { AXPDialogOpener } from '@acorex-platform/framework-client/core';
8
9
  import * as i6 from '@acorex/core/translation';
9
10
  import { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';
10
11
  import * as i0 from '@angular/core';
@@ -148,6 +149,7 @@ class ConnectJiraCommand {
148
149
  constructor() {
149
150
  //#region ---- Services & Dependencies ----
150
151
  this.popupService = inject(AXPopupService);
152
+ this.dialogOpener = inject(AXPDialogOpener);
151
153
  this.translationService = inject(AXTranslationService);
152
154
  this.entityService = inject(AXPEntityService);
153
155
  this.layoutBuilder = inject(AXPLayoutBuilderService);
@@ -179,11 +181,18 @@ class ConnectJiraCommand {
179
181
  //#region ---- Instance Picker ----
180
182
  async pickInstance() {
181
183
  const instances = await this.loadActiveInstances();
182
- const title = await this.translationService.translateAsync('@extensions-jira:integration.connect.instance-picker.title');
183
- const result = await this.popupService.open(AXMJiraInstancePickerPopupComponent, {
184
- title,
185
- size: 'sm',
186
- data: { instances },
184
+ let title = '';
185
+ const result = await this.dialogOpener.openPopup({
186
+ load: () => Promise.resolve(AXMJiraInstancePickerPopupComponent),
187
+ data: { instanceIds: instances.map((instance) => instance.id) },
188
+ prepare: async () => {
189
+ title = await this.translationService.translateAsync('@extensions-jira:integration.connect.instance-picker.title');
190
+ },
191
+ show: (component) => this.popupService.open(component, {
192
+ title,
193
+ size: 'sm',
194
+ data: { instances },
195
+ }),
187
196
  });
188
197
  return result?.data?.instance ?? null;
189
198
  }
@@ -343,4 +352,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
343
352
  }] });
344
353
 
345
354
  export { ConnectJiraCommand };
346
- //# sourceMappingURL=acorex-platform-extension-project-management-jira-client-connect-jira.command-B_myUzgA.mjs.map
355
+ //# sourceMappingURL=acorex-platform-extension-project-management-jira-client-connect-jira.command-BhnLiDk0.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-extension-project-management-jira-client-connect-jira.command-BhnLiDk0.mjs","sources":["../../../../libs/extensions/project-management/jira/client/src/lib/features/connect/ui/jira-instance-picker-popup.component.ts","../../../../libs/extensions/project-management/jira/client/src/lib/features/connect/connect-jira.command.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXSelectionListModule } from '@acorex/components/selection-list';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { resolveMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport type { AXEJiraInstanceEntityModel } from '@acorex-platform/extension-project-management-jira-domain';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXMJiraInstancePickerPopupResult {\n instance: AXEJiraInstanceEntityModel;\n}\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axm-jira-instance-picker-popup',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AsyncPipe, AXButtonModule, AXDecoratorModule, AXSelectionListModule, AXTranslationModule],\n template: `\n <div class=\"flex flex-col gap-2 p-4\">\n @if (instances.length === 0) {\n <p class=\"text-sm opacity-70\">\n {{ '@extensions-jira:integration.connect.instance-picker.empty' | translate | async }}\n </p>\n } @else {\n <ax-selection-list\n class=\"w-full\"\n valueField=\"id\"\n textField=\"title\"\n [direction]=\"'vertical'\"\n [look]=\"'solid'\"\n [multiple]=\"false\"\n [showControl]=\"false\"\n [items]=\"instanceListItems()\"\n [customTemplate]=\"instanceItemTemplate\"\n (onValueChanged)=\"handleInstanceSelection($event)\"\n >\n <ng-template #instanceItemTemplate let-item>\n <div class=\"flex w-full flex-col items-start gap-0.5 py-1\">\n <span class=\"font-medium\">{{ item.data.title }}</span>\n <span class=\"text-xs opacity-70\">{{ item.data.deploymentLabelKey | translate | async }}</span>\n </div>\n </ng-template>\n </ax-selection-list>\n }\n </div>\n <ax-footer>\n <ax-suffix>\n <ax-button\n look=\"outline\"\n [text]=\"'@general:actions.cancel.title' | translate | async\"\n (onClick)=\"close()\"\n ></ax-button>\n </ax-suffix>\n </ax-footer>\n `,\n})\nexport class AXMJiraInstancePickerPopupComponent extends AXBasePageComponent {\n instances: AXEJiraInstanceEntityModel[] = [];\n\n protected instanceListItems(): Array<{\n id: string;\n title: string;\n deploymentLabelKey: string;\n }> {\n return this.instances.map((instance) => ({\n id: instance.id,\n title: this.instanceTitle(instance),\n deploymentLabelKey: this.deploymentLabelKey(instance),\n }));\n }\n\n protected handleInstanceSelection(event: AXValueChangedEvent): void {\n if (!event.isUserInteraction) {\n return;\n }\n\n const instance = this.instances.find((item) => item.id === event.value);\n if (instance) {\n this.selectInstance(instance);\n }\n }\n\n protected instanceTitle(instance: AXEJiraInstanceEntityModel): string {\n return resolveMultiLanguageString(instance.title, 'en-US');\n }\n\n protected deploymentLabelKey(instance: AXEJiraInstanceEntityModel): string {\n return instance.deploymentType === 'cloud'\n ? '@extensions-jira:instances.entities.instance.fields.deployment-type.options.cloud'\n : '@extensions-jira:instances.entities.instance.fields.deployment-type.options.self-hosted';\n }\n\n protected selectInstance(instance: AXEJiraInstanceEntityModel): void {\n this.close({ instance } satisfies AXMJiraInstancePickerPopupResult);\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport {\n AXP_INTEGRATION_AUTH_METHOD_TYPE,\n runtimeCommandPayloadData,\n type AXPIntegrationConnectionScope,\n type AXPRuntimeCommandResult,\n type AXPSafeIntegrationConnectionDto,\n} from '@acorex-platform/framework-shared/core';\nimport {\n type ConnectCommandResult,\n} from '@acorex-platform/module-integration-management-client';\nimport { AXMIntegrationManagementCommandKeys } from '@acorex-platform/module-integration-management-client/contracts';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport {\n AXPLayoutBuilderService,\n resolveLayoutBuilderDialogResult,\n type AXPDialogRef,\n type IActionBuilder,\n type IDialogBuilder,\n type IFlexContainerBuilder,\n type IFormFieldBuilder,\n} from '@acorex-platform/framework-client/layout/builder';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXPDialogOpener } from '@acorex-platform/framework-client/core';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { Injectable, inject } from '@angular/core';\nimport { defaultTo, get, trim } from 'lodash-es';\n\nimport { RootConfig } from '@acorex-platform/extension-project-management-jira-client/contracts';\nimport type { AXEJiraInstanceEntityModel } from '@acorex-platform/extension-project-management-jira-domain';\nimport {\n AXMJiraInstancePickerPopupComponent,\n type AXMJiraInstancePickerPopupResult,\n} from './ui/jira-instance-picker-popup.component';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface ConnectJiraCommandInput {\n providerId?: string;\n connectionScope?: AXPIntegrationConnectionScope;\n}\n\ninterface JiraPatFormContext {\n displayName: string;\n instanceUrl: string;\n token: string;\n}\n\ninterface JiraPatFormResult {\n displayName: string;\n instanceUrl: string;\n token: string;\n}\n\n//#endregion\n\n//#region ---- Command ----\n\n/** Jira connect: pick instance → self-hosted PAT or cloud OAuth2. */\n@Injectable({ providedIn: 'root' })\nexport class ConnectJiraCommand implements AXPCommand<ConnectJiraCommandInput, ConnectCommandResult> {\n //#region ---- Services & Dependencies ----\n\n private readonly popupService = inject(AXPopupService);\n private readonly dialogOpener = inject(AXPDialogOpener);\n private readonly translationService = inject(AXTranslationService);\n private readonly entityService = inject(AXPEntityService);\n private readonly layoutBuilder = inject(AXPLayoutBuilderService);\n private readonly commandService = inject(AXPCommandService);\n private readonly sessionService = inject(AXPSessionService);\n\n //#endregion\n\n //#region ---- Execute ----\n\n async execute(input: ConnectJiraCommandInput = {}): AXPCommandExecuteResultPromise<ConnectCommandResult> {\n try {\n const providerId = defaultTo(input.providerId, 'jira');\n const connectionScope: AXPIntegrationConnectionScope = input.connectionScope ?? 'tenant';\n const I18N = '@extensions-jira:integration.connect';\n\n const instance = await this.pickInstance();\n if (!instance) {\n return { success: true, kind: 'object', data: { outcome: 'cancelled' } };\n }\n\n if (instance.deploymentType === 'selfHosted') {\n return this.connectSelfHosted(providerId, connectionScope, instance, I18N);\n }\n\n return this.connectCloud(providerId, connectionScope, instance, I18N);\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to connect Jira instance.';\n return { success: false, message: { text: message } };\n }\n }\n\n //#endregion\n\n //#region ---- Instance Picker ----\n\n private async pickInstance(): Promise<AXEJiraInstanceEntityModel | null> {\n const instances = await this.loadActiveInstances();\n let title = '';\n\n const result = await this.dialogOpener.openPopup({\n load: () => Promise.resolve(AXMJiraInstancePickerPopupComponent),\n data: { instanceIds: instances.map((instance) => instance.id) },\n prepare: async () => {\n title = await this.translationService.translateAsync(\n '@extensions-jira:integration.connect.instance-picker.title',\n );\n },\n show: (component) =>\n this.popupService.open(component, {\n title,\n size: 'sm',\n data: { instances },\n }),\n });\n\n return (result?.data as AXMJiraInstancePickerPopupResult | undefined)?.instance ?? null;\n }\n\n private async loadActiveInstances(): Promise<AXEJiraInstanceEntityModel[]> {\n const accessor = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.jiraInstance.name)\n .data<string, AXEJiraInstanceEntityModel>();\n\n const result = await accessor.query({\n skip: 0,\n take: 200,\n filter: {\n logic: 'and',\n filters: [{ field: 'isActive', operator: { type: 'equal' }, value: true }],\n },\n });\n\n return result.items ?? [];\n }\n\n //#endregion\n\n //#region ---- Self-Hosted (PAT) ----\n\n private async connectSelfHosted(\n providerId: string,\n connectionScope: AXPIntegrationConnectionScope,\n instance: AXEJiraInstanceEntityModel,\n i18nPrefix: string,\n ): AXPCommandExecuteResultPromise<ConnectCommandResult> {\n const form = await this.openPatDialog({\n i18nPrefix,\n context: {\n displayName: instance.name,\n instanceUrl: defaultTo(instance.baseUrl, ''),\n token: '',\n },\n instanceUrlReadonly: true,\n });\n\n if (!form) {\n return { success: true, kind: 'object', data: { outcome: 'cancelled' } };\n }\n\n const result = await this.commandService.execute<\n Record<string, unknown>,\n AXPSafeIntegrationConnectionDto\n >(AXMIntegrationManagementCommandKeys.ConnectionConnectWithCredentials, {\n providerId,\n authMethodType: AXP_INTEGRATION_AUTH_METHOD_TYPE.Pat,\n connectionScope,\n connectionKey: instance.name,\n displayName: defaultTo(trim(form.displayName), instance.name),\n instanceUrl: defaultTo(trim(form.instanceUrl), defaultTo(instance.baseUrl, '')),\n credentials: { token: form.token },\n config: { jiraInstanceId: instance.id },\n });\n\n const data = runtimeCommandPayloadData(result);\n if (!data) {\n return {\n success: false,\n message: result?.message ?? { text: 'Failed to save Jira connection.' },\n };\n }\n\n return { success: true, kind: 'object', data: { outcome: 'connected', connection: data } };\n }\n\n //#endregion\n\n //#region ---- Cloud (OAuth2) ----\n\n private async connectCloud(\n providerId: string,\n connectionScope: AXPIntegrationConnectionScope,\n instance: AXEJiraInstanceEntityModel,\n i18nPrefix: string,\n ): AXPCommandExecuteResultPromise<ConnectCommandResult> {\n const instructions = await this.translationService.translateAsync(\n '@extensions-jira:integration.auth.oauth.instructions',\n );\n\n const confirmedResult = await this.layoutBuilder\n .create()\n .dialog<boolean>((dialog: IDialogBuilder<boolean>) => {\n dialog\n .setTitle(`${i18nPrefix}.oauth-dialog.title`)\n .setSize('sm')\n .setCloseButton(true)\n .content((flex: IFlexContainerBuilder) => {\n flex\n .setDirection('column')\n .setGap('12px')\n .customWidget('text-block-layout', {\n content: instructions ?? '',\n });\n })\n .setActions((actions: IActionBuilder) => {\n actions.cancel('@general:actions.cancel.title').submit(`${i18nPrefix}.oauth-dialog.actions.connect`);\n })\n .onAction(async (ref: AXPDialogRef) => ref.action() !== 'cancel');\n })\n .show();\n\n const confirmed = resolveLayoutBuilderDialogResult<boolean>(confirmedResult);\n if (!confirmed) {\n return { success: true, kind: 'object', data: { outcome: 'cancelled' } };\n }\n\n return {\n success: false,\n message: {\n text: '@extensions-jira:integration.auth.oauth.not-implemented',\n },\n };\n }\n\n //#endregion\n\n //#region ---- Dialogs ----\n\n private async openPatDialog(input: {\n i18nPrefix: string;\n context: JiraPatFormContext;\n instanceUrlReadonly?: boolean;\n }): Promise<JiraPatFormResult | null> {\n const instructions = await this.translationService.translateAsync(\n '@extensions-jira:integration.auth.pat.instructions',\n );\n\n const result = await this.layoutBuilder\n .create()\n .dialog<JiraPatFormResult | null>((dialog: IDialogBuilder<JiraPatFormResult | null>) => {\n dialog\n .setTitle(`${input.i18nPrefix}.pat-dialog.title`)\n .setSize('md')\n .setCloseButton(true)\n .setContext({ ...input.context })\n .content((flex: IFlexContainerBuilder) => {\n flex\n .setDirection('column')\n .setGap('12px')\n .customWidget('text-block-layout', { content: instructions ?? '' })\n .formField(`${input.i18nPrefix}.pat-dialog.fields.display-name`, (field: IFormFieldBuilder) => {\n field.path('displayName');\n field.textBox({ placeholder: `${input.i18nPrefix}.pat-dialog.placeholders.display-name` });\n })\n .formField(`${input.i18nPrefix}.pat-dialog.fields.instance-url`, (field) => {\n field.path('instanceUrl');\n if (input.instanceUrlReadonly) {\n field.readonly(true);\n }\n field.textBox({\n placeholder: `${input.i18nPrefix}.pat-dialog.placeholders.instance-url`,\n });\n })\n .formField(`${input.i18nPrefix}.pat-dialog.fields.token`, (field) => {\n field.path('token');\n field.passwordBox({\n placeholder: `${input.i18nPrefix}.pat-dialog.placeholders.token`,\n revealToggle: true,\n validations: [{ rule: 'required' }],\n });\n });\n })\n .setActions((actions: IActionBuilder) => {\n actions\n .cancel('@general:actions.cancel.title')\n .submit(`${input.i18nPrefix}.pat-dialog.actions.save`);\n })\n .onAction(async (ref: AXPDialogRef) => {\n if (ref.action() === 'cancel') {\n return null;\n }\n const ctx = ref.context() as JiraPatFormContext;\n const token = trim(ctx.token);\n if (!token) {\n throw new Error('Personal access token is required.');\n }\n return {\n displayName: trim(ctx.displayName),\n instanceUrl: trim(ctx.instanceUrl),\n token,\n };\n });\n })\n .show();\n\n return resolveLayoutBuilderDialogResult<JiraPatFormResult>(result);\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":["i2","i4"],"mappings":"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"}
@@ -624,7 +624,7 @@ class AXEJiraExtensionModule {
624
624
  provideCommandSetups([
625
625
  {
626
626
  key: AXEJiraCommandKeys.ConnectionConnect,
627
- command: () => import('./acorex-platform-extension-project-management-jira-client-connect-jira.command-B_myUzgA.mjs').then((c) => c.ConnectJiraCommand),
627
+ command: () => import('./acorex-platform-extension-project-management-jira-client-connect-jira.command-BhnLiDk0.mjs').then((c) => c.ConnectJiraCommand),
628
628
  },
629
629
  ]),
630
630
  ], imports: [AXMIntegrationManagementModule] }); }
@@ -674,7 +674,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
674
674
  provideCommandSetups([
675
675
  {
676
676
  key: AXEJiraCommandKeys.ConnectionConnect,
677
- command: () => import('./acorex-platform-extension-project-management-jira-client-connect-jira.command-B_myUzgA.mjs').then((c) => c.ConnectJiraCommand),
677
+ command: () => import('./acorex-platform-extension-project-management-jira-client-connect-jira.command-BhnLiDk0.mjs').then((c) => c.ConnectJiraCommand),
678
678
  },
679
679
  ]),
680
680
  ],
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@acorex-platform/extension-project-management-jira-client",
3
- "version": "0.0.56",
3
+ "version": "0.0.58",
4
4
  "sideEffects": false,
5
5
  "peerDependencies": {
6
- "@acorex-platform/extension-project-management-core-client": "0.0.56",
6
+ "@acorex-platform/extension-project-management-core-client": "0.0.58",
7
7
  "@angular/common": "^21.0.0 || ^22.0.0",
8
8
  "@angular/core": "^21.0.0 || ^22.0.0"
9
9
  },
10
10
  "dependencies": {
11
- "@acorex-platform/extension-project-management-jira-domain": "0.0.56",
11
+ "@acorex-platform/extension-project-management-jira-domain": "0.0.58",
12
12
  "tslib": "^2.3.0"
13
13
  },
14
14
  "module": "fesm2022/acorex-platform-extension-project-management-jira-client.mjs",
@@ -1 +0,0 @@
1
- {"version":3,"file":"acorex-platform-extension-project-management-jira-client-connect-jira.command-B_myUzgA.mjs","sources":["../../../../libs/extensions/project-management/jira/client/src/lib/features/connect/ui/jira-instance-picker-popup.component.ts","../../../../libs/extensions/project-management/jira/client/src/lib/features/connect/connect-jira.command.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXSelectionListModule } from '@acorex/components/selection-list';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { resolveMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport type { AXEJiraInstanceEntityModel } from '@acorex-platform/extension-project-management-jira-domain';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXMJiraInstancePickerPopupResult {\n instance: AXEJiraInstanceEntityModel;\n}\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axm-jira-instance-picker-popup',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AsyncPipe, AXButtonModule, AXDecoratorModule, AXSelectionListModule, AXTranslationModule],\n template: `\n <div class=\"flex flex-col gap-2 p-4\">\n @if (instances.length === 0) {\n <p class=\"text-sm opacity-70\">\n {{ '@extensions-jira:integration.connect.instance-picker.empty' | translate | async }}\n </p>\n } @else {\n <ax-selection-list\n class=\"w-full\"\n valueField=\"id\"\n textField=\"title\"\n [direction]=\"'vertical'\"\n [look]=\"'solid'\"\n [multiple]=\"false\"\n [showControl]=\"false\"\n [items]=\"instanceListItems()\"\n [customTemplate]=\"instanceItemTemplate\"\n (onValueChanged)=\"handleInstanceSelection($event)\"\n >\n <ng-template #instanceItemTemplate let-item>\n <div class=\"flex w-full flex-col items-start gap-0.5 py-1\">\n <span class=\"font-medium\">{{ item.data.title }}</span>\n <span class=\"text-xs opacity-70\">{{ item.data.deploymentLabelKey | translate | async }}</span>\n </div>\n </ng-template>\n </ax-selection-list>\n }\n </div>\n <ax-footer>\n <ax-suffix>\n <ax-button\n look=\"outline\"\n [text]=\"'@general:actions.cancel.title' | translate | async\"\n (onClick)=\"close()\"\n ></ax-button>\n </ax-suffix>\n </ax-footer>\n `,\n})\nexport class AXMJiraInstancePickerPopupComponent extends AXBasePageComponent {\n instances: AXEJiraInstanceEntityModel[] = [];\n\n protected instanceListItems(): Array<{\n id: string;\n title: string;\n deploymentLabelKey: string;\n }> {\n return this.instances.map((instance) => ({\n id: instance.id,\n title: this.instanceTitle(instance),\n deploymentLabelKey: this.deploymentLabelKey(instance),\n }));\n }\n\n protected handleInstanceSelection(event: AXValueChangedEvent): void {\n if (!event.isUserInteraction) {\n return;\n }\n\n const instance = this.instances.find((item) => item.id === event.value);\n if (instance) {\n this.selectInstance(instance);\n }\n }\n\n protected instanceTitle(instance: AXEJiraInstanceEntityModel): string {\n return resolveMultiLanguageString(instance.title, 'en-US');\n }\n\n protected deploymentLabelKey(instance: AXEJiraInstanceEntityModel): string {\n return instance.deploymentType === 'cloud'\n ? '@extensions-jira:instances.entities.instance.fields.deployment-type.options.cloud'\n : '@extensions-jira:instances.entities.instance.fields.deployment-type.options.self-hosted';\n }\n\n protected selectInstance(instance: AXEJiraInstanceEntityModel): void {\n this.close({ instance } satisfies AXMJiraInstancePickerPopupResult);\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport {\n AXP_INTEGRATION_AUTH_METHOD_TYPE,\n runtimeCommandPayloadData,\n type AXPIntegrationConnectionScope,\n type AXPRuntimeCommandResult,\n type AXPSafeIntegrationConnectionDto,\n} from '@acorex-platform/framework-shared/core';\nimport {\n type ConnectCommandResult,\n} from '@acorex-platform/module-integration-management-client';\nimport { AXMIntegrationManagementCommandKeys } from '@acorex-platform/module-integration-management-client/contracts';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport {\n AXPLayoutBuilderService,\n resolveLayoutBuilderDialogResult,\n type AXPDialogRef,\n type IActionBuilder,\n type IDialogBuilder,\n type IFlexContainerBuilder,\n type IFormFieldBuilder,\n} from '@acorex-platform/framework-client/layout/builder';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { Injectable, inject } from '@angular/core';\nimport { defaultTo, get, trim } from 'lodash-es';\n\nimport { RootConfig } from '@acorex-platform/extension-project-management-jira-client/contracts';\nimport type { AXEJiraInstanceEntityModel } from '@acorex-platform/extension-project-management-jira-domain';\nimport {\n AXMJiraInstancePickerPopupComponent,\n type AXMJiraInstancePickerPopupResult,\n} from './ui/jira-instance-picker-popup.component';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface ConnectJiraCommandInput {\n providerId?: string;\n connectionScope?: AXPIntegrationConnectionScope;\n}\n\ninterface JiraPatFormContext {\n displayName: string;\n instanceUrl: string;\n token: string;\n}\n\ninterface JiraPatFormResult {\n displayName: string;\n instanceUrl: string;\n token: string;\n}\n\n//#endregion\n\n//#region ---- Command ----\n\n/** Jira connect: pick instance → self-hosted PAT or cloud OAuth2. */\n@Injectable({ providedIn: 'root' })\nexport class ConnectJiraCommand implements AXPCommand<ConnectJiraCommandInput, ConnectCommandResult> {\n //#region ---- Services & Dependencies ----\n\n private readonly popupService = inject(AXPopupService);\n private readonly translationService = inject(AXTranslationService);\n private readonly entityService = inject(AXPEntityService);\n private readonly layoutBuilder = inject(AXPLayoutBuilderService);\n private readonly commandService = inject(AXPCommandService);\n private readonly sessionService = inject(AXPSessionService);\n\n //#endregion\n\n //#region ---- Execute ----\n\n async execute(input: ConnectJiraCommandInput = {}): AXPCommandExecuteResultPromise<ConnectCommandResult> {\n try {\n const providerId = defaultTo(input.providerId, 'jira');\n const connectionScope: AXPIntegrationConnectionScope = input.connectionScope ?? 'tenant';\n const I18N = '@extensions-jira:integration.connect';\n\n const instance = await this.pickInstance();\n if (!instance) {\n return { success: true, kind: 'object', data: { outcome: 'cancelled' } };\n }\n\n if (instance.deploymentType === 'selfHosted') {\n return this.connectSelfHosted(providerId, connectionScope, instance, I18N);\n }\n\n return this.connectCloud(providerId, connectionScope, instance, I18N);\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to connect Jira instance.';\n return { success: false, message: { text: message } };\n }\n }\n\n //#endregion\n\n //#region ---- Instance Picker ----\n\n private async pickInstance(): Promise<AXEJiraInstanceEntityModel | null> {\n const instances = await this.loadActiveInstances();\n const title = await this.translationService.translateAsync(\n '@extensions-jira:integration.connect.instance-picker.title',\n );\n\n const result = await this.popupService.open(AXMJiraInstancePickerPopupComponent, {\n title,\n size: 'sm',\n data: { instances },\n });\n\n return (result?.data as AXMJiraInstancePickerPopupResult | undefined)?.instance ?? null;\n }\n\n private async loadActiveInstances(): Promise<AXEJiraInstanceEntityModel[]> {\n const accessor = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.jiraInstance.name)\n .data<string, AXEJiraInstanceEntityModel>();\n\n const result = await accessor.query({\n skip: 0,\n take: 200,\n filter: {\n logic: 'and',\n filters: [{ field: 'isActive', operator: { type: 'equal' }, value: true }],\n },\n });\n\n return result.items ?? [];\n }\n\n //#endregion\n\n //#region ---- Self-Hosted (PAT) ----\n\n private async connectSelfHosted(\n providerId: string,\n connectionScope: AXPIntegrationConnectionScope,\n instance: AXEJiraInstanceEntityModel,\n i18nPrefix: string,\n ): AXPCommandExecuteResultPromise<ConnectCommandResult> {\n const form = await this.openPatDialog({\n i18nPrefix,\n context: {\n displayName: instance.name,\n instanceUrl: defaultTo(instance.baseUrl, ''),\n token: '',\n },\n instanceUrlReadonly: true,\n });\n\n if (!form) {\n return { success: true, kind: 'object', data: { outcome: 'cancelled' } };\n }\n\n const result = await this.commandService.execute<\n Record<string, unknown>,\n AXPSafeIntegrationConnectionDto\n >(AXMIntegrationManagementCommandKeys.ConnectionConnectWithCredentials, {\n providerId,\n authMethodType: AXP_INTEGRATION_AUTH_METHOD_TYPE.Pat,\n connectionScope,\n connectionKey: instance.name,\n displayName: defaultTo(trim(form.displayName), instance.name),\n instanceUrl: defaultTo(trim(form.instanceUrl), defaultTo(instance.baseUrl, '')),\n credentials: { token: form.token },\n config: { jiraInstanceId: instance.id },\n });\n\n const data = runtimeCommandPayloadData(result);\n if (!data) {\n return {\n success: false,\n message: result?.message ?? { text: 'Failed to save Jira connection.' },\n };\n }\n\n return { success: true, kind: 'object', data: { outcome: 'connected', connection: data } };\n }\n\n //#endregion\n\n //#region ---- Cloud (OAuth2) ----\n\n private async connectCloud(\n providerId: string,\n connectionScope: AXPIntegrationConnectionScope,\n instance: AXEJiraInstanceEntityModel,\n i18nPrefix: string,\n ): AXPCommandExecuteResultPromise<ConnectCommandResult> {\n const instructions = await this.translationService.translateAsync(\n '@extensions-jira:integration.auth.oauth.instructions',\n );\n\n const confirmedResult = await this.layoutBuilder\n .create()\n .dialog<boolean>((dialog: IDialogBuilder<boolean>) => {\n dialog\n .setTitle(`${i18nPrefix}.oauth-dialog.title`)\n .setSize('sm')\n .setCloseButton(true)\n .content((flex: IFlexContainerBuilder) => {\n flex\n .setDirection('column')\n .setGap('12px')\n .customWidget('text-block-layout', {\n content: instructions ?? '',\n });\n })\n .setActions((actions: IActionBuilder) => {\n actions.cancel('@general:actions.cancel.title').submit(`${i18nPrefix}.oauth-dialog.actions.connect`);\n })\n .onAction(async (ref: AXPDialogRef) => ref.action() !== 'cancel');\n })\n .show();\n\n const confirmed = resolveLayoutBuilderDialogResult<boolean>(confirmedResult);\n if (!confirmed) {\n return { success: true, kind: 'object', data: { outcome: 'cancelled' } };\n }\n\n return {\n success: false,\n message: {\n text: '@extensions-jira:integration.auth.oauth.not-implemented',\n },\n };\n }\n\n //#endregion\n\n //#region ---- Dialogs ----\n\n private async openPatDialog(input: {\n i18nPrefix: string;\n context: JiraPatFormContext;\n instanceUrlReadonly?: boolean;\n }): Promise<JiraPatFormResult | null> {\n const instructions = await this.translationService.translateAsync(\n '@extensions-jira:integration.auth.pat.instructions',\n );\n\n const result = await this.layoutBuilder\n .create()\n .dialog<JiraPatFormResult | null>((dialog: IDialogBuilder<JiraPatFormResult | null>) => {\n dialog\n .setTitle(`${input.i18nPrefix}.pat-dialog.title`)\n .setSize('md')\n .setCloseButton(true)\n .setContext({ ...input.context })\n .content((flex: IFlexContainerBuilder) => {\n flex\n .setDirection('column')\n .setGap('12px')\n .customWidget('text-block-layout', { content: instructions ?? '' })\n .formField(`${input.i18nPrefix}.pat-dialog.fields.display-name`, (field: IFormFieldBuilder) => {\n field.path('displayName');\n field.textBox({ placeholder: `${input.i18nPrefix}.pat-dialog.placeholders.display-name` });\n })\n .formField(`${input.i18nPrefix}.pat-dialog.fields.instance-url`, (field) => {\n field.path('instanceUrl');\n if (input.instanceUrlReadonly) {\n field.readonly(true);\n }\n field.textBox({\n placeholder: `${input.i18nPrefix}.pat-dialog.placeholders.instance-url`,\n });\n })\n .formField(`${input.i18nPrefix}.pat-dialog.fields.token`, (field) => {\n field.path('token');\n field.passwordBox({\n placeholder: `${input.i18nPrefix}.pat-dialog.placeholders.token`,\n revealToggle: true,\n validations: [{ rule: 'required' }],\n });\n });\n })\n .setActions((actions: IActionBuilder) => {\n actions\n .cancel('@general:actions.cancel.title')\n .submit(`${input.i18nPrefix}.pat-dialog.actions.save`);\n })\n .onAction(async (ref: AXPDialogRef) => {\n if (ref.action() === 'cancel') {\n return null;\n }\n const ctx = ref.context() as JiraPatFormContext;\n const token = trim(ctx.token);\n if (!token) {\n throw new Error('Personal access token is required.');\n }\n return {\n displayName: trim(ctx.displayName),\n instanceUrl: trim(ctx.instanceUrl),\n token,\n };\n });\n })\n .show();\n\n return resolveLayoutBuilderDialogResult<JiraPatFormResult>(result);\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":["i2","i4"],"mappings":"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"}