sfdx-browserforce-plugin 5.1.1 → 5.2.0-next.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +54 -16
- package/lib/browserforce-command.d.ts +15 -0
- package/lib/browserforce-command.js +61 -0
- package/lib/browserforce-command.js.map +1 -0
- package/lib/browserforce.d.ts +29 -0
- package/lib/browserforce.js +194 -0
- package/lib/browserforce.js.map +1 -0
- package/lib/commands/browserforce/apply.d.ts +10 -0
- package/lib/commands/browserforce/apply.js +54 -0
- package/lib/commands/browserforce/apply.js.map +1 -0
- package/lib/commands/browserforce/plan.d.ts +10 -0
- package/lib/commands/browserforce/plan.js +56 -0
- package/lib/commands/browserforce/plan.js.map +1 -0
- package/lib/config-parser.d.ts +16 -0
- package/lib/config-parser.js +24 -0
- package/lib/config-parser.js.map +1 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -0
- package/lib/jsforce-utils.d.ts +5 -0
- package/lib/jsforce-utils.js +14 -0
- package/lib/jsforce-utils.js.map +1 -0
- package/lib/pages/login.d.ts +8 -0
- package/lib/pages/login.js +39 -0
- package/lib/pages/login.js.map +1 -0
- package/lib/plugin.d.ts +17 -0
- package/lib/plugin.js +30 -0
- package/lib/plugin.js.map +1 -0
- package/lib/plugins/activity-settings/index.d.ts +9 -0
- package/lib/plugins/activity-settings/index.e2e-spec.d.ts +1 -0
- package/lib/plugins/activity-settings/index.e2e-spec.js +36 -0
- package/lib/plugins/activity-settings/index.e2e-spec.js.map +1 -0
- package/lib/plugins/activity-settings/index.js +34 -0
- package/lib/plugins/activity-settings/index.js.map +1 -0
- package/lib/plugins/company-information/index.d.ts +8 -0
- package/lib/plugins/company-information/index.e2e-spec.d.ts +1 -0
- package/lib/plugins/company-information/index.e2e-spec.js +37 -0
- package/lib/plugins/company-information/index.e2e-spec.js.map +1 -0
- package/lib/plugins/company-information/index.js +60 -0
- package/lib/plugins/company-information/index.js.map +1 -0
- package/lib/plugins/customer-portal/available-custom-objects/index.d.ts +14 -0
- package/lib/plugins/customer-portal/available-custom-objects/index.js +114 -0
- package/lib/plugins/customer-portal/available-custom-objects/index.js.map +1 -0
- package/lib/plugins/customer-portal/available-custom-objects/index.test.d.ts +1 -0
- package/lib/plugins/customer-portal/available-custom-objects/index.test.js +39 -0
- package/lib/plugins/customer-portal/available-custom-objects/index.test.js.map +1 -0
- package/lib/plugins/customer-portal/enabled/index.d.ts +6 -0
- package/lib/plugins/customer-portal/enabled/index.js +26 -0
- package/lib/plugins/customer-portal/enabled/index.js.map +1 -0
- package/lib/plugins/customer-portal/enabled/index.test.d.ts +1 -0
- package/lib/plugins/customer-portal/enabled/index.test.js +34 -0
- package/lib/plugins/customer-portal/enabled/index.test.js.map +1 -0
- package/lib/plugins/customer-portal/index.d.ts +15 -0
- package/lib/plugins/customer-portal/index.e2e-spec.d.ts +1 -0
- package/lib/plugins/customer-portal/index.e2e-spec.js +202 -0
- package/lib/plugins/customer-portal/index.e2e-spec.js.map +1 -0
- package/lib/plugins/customer-portal/index.js +59 -0
- package/lib/plugins/customer-portal/index.js.map +1 -0
- package/lib/plugins/customer-portal/index.test.d.ts +1 -0
- package/lib/plugins/customer-portal/index.test.js +84 -0
- package/lib/plugins/customer-portal/index.test.js.map +1 -0
- package/lib/plugins/customer-portal/portals/index.d.ts +25 -0
- package/lib/plugins/customer-portal/portals/index.js +216 -0
- package/lib/plugins/customer-portal/portals/index.js.map +1 -0
- package/lib/plugins/customer-portal/portals/index.test.d.ts +1 -0
- package/lib/plugins/customer-portal/portals/index.test.js +140 -0
- package/lib/plugins/customer-portal/portals/index.test.js.map +1 -0
- package/lib/plugins/density-settings/index.d.ts +10 -0
- package/lib/plugins/density-settings/index.e2e-spec.d.ts +1 -0
- package/lib/plugins/density-settings/index.e2e-spec.js +39 -0
- package/lib/plugins/density-settings/index.e2e-spec.js.map +1 -0
- package/lib/plugins/density-settings/index.js +54 -0
- package/lib/plugins/density-settings/index.js.map +1 -0
- package/lib/plugins/deprecated.d.ts +4 -0
- package/lib/plugins/deprecated.js +28 -0
- package/lib/plugins/deprecated.js.map +1 -0
- package/lib/plugins/email-deliverability/index.d.ts +9 -0
- package/lib/plugins/email-deliverability/index.e2e-spec.d.ts +1 -0
- package/lib/plugins/email-deliverability/index.e2e-spec.js +55 -0
- package/lib/plugins/email-deliverability/index.e2e-spec.js.map +1 -0
- package/lib/plugins/email-deliverability/index.js +42 -0
- package/lib/plugins/email-deliverability/index.js.map +1 -0
- package/lib/plugins/high-velocity-sales-settings/index.d.ts +10 -0
- package/lib/plugins/high-velocity-sales-settings/index.e2e-spec.d.ts +1 -0
- package/lib/plugins/high-velocity-sales-settings/index.e2e-spec.js +29 -0
- package/lib/plugins/high-velocity-sales-settings/index.e2e-spec.js.map +1 -0
- package/lib/plugins/high-velocity-sales-settings/index.js +42 -0
- package/lib/plugins/high-velocity-sales-settings/index.js.map +1 -0
- package/lib/plugins/high-velocity-sales-settings/page.d.ts +7 -0
- package/lib/plugins/high-velocity-sales-settings/page.js +28 -0
- package/lib/plugins/high-velocity-sales-settings/page.js.map +1 -0
- package/lib/plugins/history-tracking/index.d.ts +17 -0
- package/lib/plugins/history-tracking/index.e2e-spec.d.ts +1 -0
- package/lib/plugins/history-tracking/index.e2e-spec.js +106 -0
- package/lib/plugins/history-tracking/index.e2e-spec.js.map +1 -0
- package/lib/plugins/history-tracking/index.js +176 -0
- package/lib/plugins/history-tracking/index.js.map +1 -0
- package/lib/plugins/home-page-layouts/index.d.ts +14 -0
- package/lib/plugins/home-page-layouts/index.e2e-spec.d.ts +1 -0
- package/lib/plugins/home-page-layouts/index.e2e-spec.js +47 -0
- package/lib/plugins/home-page-layouts/index.e2e-spec.js.map +1 -0
- package/lib/plugins/home-page-layouts/index.js +94 -0
- package/lib/plugins/home-page-layouts/index.js.map +1 -0
- package/lib/plugins/home-page-layouts/index.test.d.ts +1 -0
- package/lib/plugins/home-page-layouts/index.test.js +104 -0
- package/lib/plugins/home-page-layouts/index.test.js.map +1 -0
- package/lib/plugins/index.d.ts +24 -0
- package/lib/plugins/index.js +25 -0
- package/lib/plugins/index.js.map +1 -0
- package/lib/plugins/lightning-experience-settings/index.d.ts +18 -0
- package/lib/plugins/lightning-experience-settings/index.e2e-spec.d.ts +1 -0
- package/lib/plugins/lightning-experience-settings/index.e2e-spec.js +40 -0
- package/lib/plugins/lightning-experience-settings/index.e2e-spec.js.map +1 -0
- package/lib/plugins/lightning-experience-settings/index.js +101 -0
- package/lib/plugins/lightning-experience-settings/index.js.map +1 -0
- package/lib/plugins/linkedin-sales-navigator-settings/index.d.ts +8 -0
- package/lib/plugins/linkedin-sales-navigator-settings/index.e2e-spec.d.ts +1 -0
- package/lib/plugins/linkedin-sales-navigator-settings/index.e2e-spec.js +29 -0
- package/lib/plugins/linkedin-sales-navigator-settings/index.e2e-spec.js.map +1 -0
- package/lib/plugins/linkedin-sales-navigator-settings/index.js +15 -0
- package/lib/plugins/linkedin-sales-navigator-settings/index.js.map +1 -0
- package/lib/plugins/linkedin-sales-navigator-settings/page.d.ts +10 -0
- package/lib/plugins/linkedin-sales-navigator-settings/page.js +42 -0
- package/lib/plugins/linkedin-sales-navigator-settings/page.js.map +1 -0
- package/lib/plugins/omni-channel-settings/index.d.ts +9 -0
- package/lib/plugins/omni-channel-settings/index.e2e-spec.d.ts +1 -0
- package/lib/plugins/omni-channel-settings/index.e2e-spec.js +30 -0
- package/lib/plugins/omni-channel-settings/index.e2e-spec.js.map +1 -0
- package/lib/plugins/omni-channel-settings/index.js +21 -0
- package/lib/plugins/omni-channel-settings/index.js.map +1 -0
- package/lib/plugins/opportunity-splits/index.d.ts +9 -0
- package/lib/plugins/opportunity-splits/index.e2e-spec.d.ts +1 -0
- package/lib/plugins/opportunity-splits/index.e2e-spec.js +46 -0
- package/lib/plugins/opportunity-splits/index.e2e-spec.js.map +1 -0
- package/lib/plugins/opportunity-splits/index.js +32 -0
- package/lib/plugins/opportunity-splits/index.js.map +1 -0
- package/lib/plugins/opportunity-splits/pages/layout-selection.d.ts +8 -0
- package/lib/plugins/opportunity-splits/pages/layout-selection.js +15 -0
- package/lib/plugins/opportunity-splits/pages/layout-selection.js.map +1 -0
- package/lib/plugins/opportunity-splits/pages/overview.d.ts +10 -0
- package/lib/plugins/opportunity-splits/pages/overview.js +33 -0
- package/lib/plugins/opportunity-splits/pages/overview.js.map +1 -0
- package/lib/plugins/opportunity-splits/pages/setup.d.ts +8 -0
- package/lib/plugins/opportunity-splits/pages/setup.js +17 -0
- package/lib/plugins/opportunity-splits/pages/setup.js.map +1 -0
- package/lib/plugins/permission-sets/index.d.ts +10 -0
- package/lib/plugins/permission-sets/index.e2e-spec.d.ts +1 -0
- package/lib/plugins/permission-sets/index.e2e-spec.js +47 -0
- package/lib/plugins/permission-sets/index.e2e-spec.js.map +1 -0
- package/lib/plugins/permission-sets/index.js +22 -0
- package/lib/plugins/permission-sets/index.js.map +1 -0
- package/lib/plugins/permission-sets/service-presence-status/index.d.ts +10 -0
- package/lib/plugins/permission-sets/service-presence-status/index.js +67 -0
- package/lib/plugins/permission-sets/service-presence-status/index.js.map +1 -0
- package/lib/plugins/picklists/field-dependencies/index.d.ts +11 -0
- package/lib/plugins/picklists/field-dependencies/index.js +56 -0
- package/lib/plugins/picklists/field-dependencies/index.js.map +1 -0
- package/lib/plugins/picklists/field-dependencies/index.test.d.ts +1 -0
- package/lib/plugins/picklists/field-dependencies/index.test.js +64 -0
- package/lib/plugins/picklists/field-dependencies/index.test.js.map +1 -0
- package/lib/plugins/picklists/field-dependencies/pages.d.ts +14 -0
- package/lib/plugins/picklists/field-dependencies/pages.js +49 -0
- package/lib/plugins/picklists/field-dependencies/pages.js.map +1 -0
- package/lib/plugins/picklists/index.d.ts +23 -0
- package/lib/plugins/picklists/index.e2e-spec.d.ts +1 -0
- package/lib/plugins/picklists/index.e2e-spec.js +100 -0
- package/lib/plugins/picklists/index.e2e-spec.js.map +1 -0
- package/lib/plugins/picklists/index.js +153 -0
- package/lib/plugins/picklists/index.js.map +1 -0
- package/lib/plugins/picklists/pages.d.ts +41 -0
- package/lib/plugins/picklists/pages.js +166 -0
- package/lib/plugins/picklists/pages.js.map +1 -0
- package/lib/plugins/picklists/standard-value-set.d.ts +1 -0
- package/lib/plugins/picklists/standard-value-set.js +80 -0
- package/lib/plugins/picklists/standard-value-set.js.map +1 -0
- package/lib/plugins/record-types/index.d.ts +13 -0
- package/lib/plugins/record-types/index.e2e-spec.d.ts +1 -0
- package/lib/plugins/record-types/index.e2e-spec.js +73 -0
- package/lib/plugins/record-types/index.e2e-spec.js.map +1 -0
- package/lib/plugins/record-types/index.js +70 -0
- package/lib/plugins/record-types/index.js.map +1 -0
- package/lib/plugins/record-types/pages.d.ts +15 -0
- package/lib/plugins/record-types/pages.js +56 -0
- package/lib/plugins/record-types/pages.js.map +1 -0
- package/lib/plugins/relate-contact-to-multiple-accounts/index.d.ts +11 -0
- package/lib/plugins/relate-contact-to-multiple-accounts/index.e2e-spec.d.ts +1 -0
- package/lib/plugins/relate-contact-to-multiple-accounts/index.e2e-spec.js +29 -0
- package/lib/plugins/relate-contact-to-multiple-accounts/index.e2e-spec.js.map +1 -0
- package/lib/plugins/relate-contact-to-multiple-accounts/index.js +62 -0
- package/lib/plugins/relate-contact-to-multiple-accounts/index.js.map +1 -0
- package/lib/plugins/reports-and-dashboards/folder-sharing/index.d.ts +8 -0
- package/lib/plugins/reports-and-dashboards/folder-sharing/index.e2e-spec.d.ts +1 -0
- package/lib/plugins/reports-and-dashboards/folder-sharing/index.e2e-spec.js +3 -0
- package/lib/plugins/reports-and-dashboards/folder-sharing/index.e2e-spec.js.map +1 -0
- package/lib/plugins/reports-and-dashboards/folder-sharing/index.js +55 -0
- package/lib/plugins/reports-and-dashboards/folder-sharing/index.js.map +1 -0
- package/lib/plugins/reports-and-dashboards/index.d.ts +11 -0
- package/lib/plugins/reports-and-dashboards/index.e2e-spec.d.ts +1 -0
- package/lib/plugins/reports-and-dashboards/index.e2e-spec.js +3 -0
- package/lib/plugins/reports-and-dashboards/index.e2e-spec.js.map +1 -0
- package/lib/plugins/reports-and-dashboards/index.js +29 -0
- package/lib/plugins/reports-and-dashboards/index.js.map +1 -0
- package/lib/plugins/salesforce-cpq-config/formConfig.d.ts +17 -0
- package/lib/plugins/salesforce-cpq-config/formConfig.js +649 -0
- package/lib/plugins/salesforce-cpq-config/formConfig.js.map +1 -0
- package/lib/plugins/salesforce-cpq-config/index.d.ts +7 -0
- package/lib/plugins/salesforce-cpq-config/index.e2e-spec.d.ts +1 -0
- package/lib/plugins/salesforce-cpq-config/index.e2e-spec.js +37 -0
- package/lib/plugins/salesforce-cpq-config/index.e2e-spec.js.map +1 -0
- package/lib/plugins/salesforce-cpq-config/index.js +214 -0
- package/lib/plugins/salesforce-cpq-config/index.js.map +1 -0
- package/lib/plugins/salesforce-to-salesforce/index.d.ts +9 -0
- package/lib/plugins/salesforce-to-salesforce/index.e2e-spec.d.ts +1 -0
- package/lib/plugins/salesforce-to-salesforce/index.e2e-spec.js +35 -0
- package/lib/plugins/salesforce-to-salesforce/index.e2e-spec.js.map +1 -0
- package/lib/plugins/salesforce-to-salesforce/index.js +36 -0
- package/lib/plugins/salesforce-to-salesforce/index.js.map +1 -0
- package/lib/plugins/security/authentication-configuration/index.d.ts +11 -0
- package/lib/plugins/security/authentication-configuration/index.e2e-spec.d.ts +1 -0
- package/lib/plugins/security/authentication-configuration/index.e2e-spec.js +101 -0
- package/lib/plugins/security/authentication-configuration/index.e2e-spec.js.map +1 -0
- package/lib/plugins/security/authentication-configuration/index.js +67 -0
- package/lib/plugins/security/authentication-configuration/index.js.map +1 -0
- package/lib/plugins/security/certificate-and-key-management/index.d.ts +23 -0
- package/lib/plugins/security/certificate-and-key-management/index.e2e-spec.d.ts +1 -0
- package/lib/plugins/security/certificate-and-key-management/index.e2e-spec.js +63 -0
- package/lib/plugins/security/certificate-and-key-management/index.e2e-spec.js.map +1 -0
- package/lib/plugins/security/certificate-and-key-management/index.js +154 -0
- package/lib/plugins/security/certificate-and-key-management/index.js.map +1 -0
- package/lib/plugins/security/certificate-and-key-management/index.test.d.ts +1 -0
- package/lib/plugins/security/certificate-and-key-management/index.test.js +61 -0
- package/lib/plugins/security/certificate-and-key-management/index.test.js.map +1 -0
- package/lib/plugins/security/index.d.ts +13 -0
- package/lib/plugins/security/index.js +42 -0
- package/lib/plugins/security/index.js.map +1 -0
- package/lib/plugins/service-channels/capacity/index.d.ts +18 -0
- package/lib/plugins/service-channels/capacity/index.js +162 -0
- package/lib/plugins/service-channels/capacity/index.js.map +1 -0
- package/lib/plugins/service-channels/index.d.ts +12 -0
- package/lib/plugins/service-channels/index.e2e-spec.d.ts +1 -0
- package/lib/plugins/service-channels/index.e2e-spec.js +61 -0
- package/lib/plugins/service-channels/index.e2e-spec.js.map +1 -0
- package/lib/plugins/service-channels/index.js +38 -0
- package/lib/plugins/service-channels/index.js.map +1 -0
- package/lib/plugins/slack/index.d.ts +9 -0
- package/lib/plugins/slack/index.e2e-spec.d.ts +1 -0
- package/lib/plugins/slack/index.e2e-spec.js +47 -0
- package/lib/plugins/slack/index.e2e-spec.js.map +1 -0
- package/lib/plugins/slack/index.js +46 -0
- package/lib/plugins/slack/index.js.map +1 -0
- package/lib/plugins/user-access-policies/index.d.ts +19 -0
- package/lib/plugins/user-access-policies/index.e2e-spec.d.ts +1 -0
- package/lib/plugins/user-access-policies/index.e2e-spec.js +63 -0
- package/lib/plugins/user-access-policies/index.e2e-spec.js.map +1 -0
- package/lib/plugins/user-access-policies/index.js +107 -0
- package/lib/plugins/user-access-policies/index.js.map +1 -0
- package/lib/plugins/user-access-policies/page.d.ts +29 -0
- package/lib/plugins/user-access-policies/page.js +115 -0
- package/lib/plugins/user-access-policies/page.js.map +1 -0
- package/lib/plugins/utils.d.ts +3 -0
- package/lib/plugins/utils.js +47 -0
- package/lib/plugins/utils.js.map +1 -0
- package/oclif.manifest.json +153 -0
- package/package.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,IAAI,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACpF,OAAO,EAAE,kBAAkB,IAAI,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAC1F,OAAO,EAAE,cAAc,IAAI,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,eAAe,IAAI,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,mBAAmB,IAAI,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC7F,OAAO,EAAE,yBAAyB,IAAI,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AACjH,OAAO,EAAE,eAAe,IAAI,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,eAAe,IAAI,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAClF,OAAO,EAAE,2BAA2B,IAAI,2BAA2B,EAAE,MAAM,0CAA0C,CAAC;AACtH,OAAO,EAAE,8BAA8B,IAAI,8BAA8B,EAAE,MAAM,8CAA8C,CAAC;AAChI,OAAO,EAAE,mBAAmB,IAAI,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAC9F,OAAO,EAAE,iBAAiB,IAAI,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvF,OAAO,EAAE,cAAc,IAAI,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,SAAS,IAAI,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,WAAW,IAAI,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,+BAA+B,IAAI,+BAA+B,EAAE,MAAM,gDAAgD,CAAC;AACpI,OAAO,EAAE,oBAAoB,IAAI,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACjG,OAAO,EAAE,mBAAmB,IAAI,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAC9F,OAAO,EAAE,sBAAsB,IAAI,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AACvG,OAAO,EAAE,QAAQ,IAAI,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,eAAe,IAAI,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,KAAK,IAAI,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,kBAAkB,IAAI,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAE3F,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,yBAAyB,EACzB,eAAe,EACf,eAAe,EACf,2BAA2B,EAC3B,8BAA8B,EAC9B,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,SAAS,EACT,WAAW,EACX,+BAA+B,EAC/B,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,QAAQ,EACR,eAAe,EACf,KAAK,GACN,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Locator, Page } from 'playwright';
|
|
2
|
+
import { BrowserforcePlugin } from '../../plugin.js';
|
|
3
|
+
type Config = {
|
|
4
|
+
activeThemeName: string;
|
|
5
|
+
};
|
|
6
|
+
type Theme = {
|
|
7
|
+
developerName: string;
|
|
8
|
+
isActive: boolean;
|
|
9
|
+
rowLocator: Locator;
|
|
10
|
+
};
|
|
11
|
+
export declare class LightningExperienceSettings extends BrowserforcePlugin {
|
|
12
|
+
setupDOMObserver(page: Page, elementName: string, callbackName: string): Promise<void>;
|
|
13
|
+
retrieve(): Promise<Config>;
|
|
14
|
+
apply(config: Config): Promise<void>;
|
|
15
|
+
getThemeData(page: Page): Promise<Theme[]>;
|
|
16
|
+
setActiveTheme(page: Page, themeDeveloperName: string): Promise<void>;
|
|
17
|
+
}
|
|
18
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import assert from 'assert';
|
|
2
|
+
import { LightningExperienceSettings } from './index.js';
|
|
3
|
+
describe(LightningExperienceSettings.name, function () {
|
|
4
|
+
describe('activeThemeName', () => {
|
|
5
|
+
let plugin;
|
|
6
|
+
let configOriginal;
|
|
7
|
+
before(async () => {
|
|
8
|
+
plugin = new LightningExperienceSettings(global.bf);
|
|
9
|
+
configOriginal = await plugin.retrieve();
|
|
10
|
+
});
|
|
11
|
+
const configLightningLite = { activeThemeName: 'LightningLite' };
|
|
12
|
+
it('should activate LightningLite theme', async () => {
|
|
13
|
+
await plugin.run(configLightningLite);
|
|
14
|
+
});
|
|
15
|
+
it('LightningLite theme should already be activated', async () => {
|
|
16
|
+
const state = await plugin.retrieve();
|
|
17
|
+
assert.deepStrictEqual(state, configLightningLite);
|
|
18
|
+
});
|
|
19
|
+
it('should activate original theme', async () => {
|
|
20
|
+
await plugin.apply(configOriginal);
|
|
21
|
+
});
|
|
22
|
+
it('original theme should already be activated', async () => {
|
|
23
|
+
const state = await plugin.retrieve();
|
|
24
|
+
assert.deepStrictEqual(state, configOriginal);
|
|
25
|
+
});
|
|
26
|
+
it('should throw for invalid theme', async () => {
|
|
27
|
+
let err;
|
|
28
|
+
try {
|
|
29
|
+
await plugin.run({ activeThemeName: 'Foo' });
|
|
30
|
+
}
|
|
31
|
+
catch (e) {
|
|
32
|
+
err = e;
|
|
33
|
+
}
|
|
34
|
+
assert.throws(() => {
|
|
35
|
+
throw err;
|
|
36
|
+
}, /Could not find theme/);
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=index.e2e-spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.e2e-spec.js","sourceRoot":"","sources":["../../../src/plugins/lightning-experience-settings/index.e2e-spec.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAEzD,QAAQ,CAAC,2BAA2B,CAAC,IAAI,EAAE;IACzC,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC/B,IAAI,MAAmC,CAAC;QACxC,IAAI,cAAc,CAAC;QACnB,MAAM,CAAC,KAAK,IAAI,EAAE;YAChB,MAAM,GAAG,IAAI,2BAA2B,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACpD,cAAc,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,MAAM,mBAAmB,GAAG,EAAE,eAAe,EAAE,eAAe,EAAE,CAAC;QACjE,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACnD,MAAM,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtC,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;YAC9C,MAAM,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtC,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;YAC9C,IAAI,GAAG,CAAC;YACR,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,GAAG,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC;YAC/C,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,GAAG,GAAG,CAAC,CAAC;YACV,CAAC;YACD,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE;gBACjB,MAAM,GAAG,CAAC;YACZ,CAAC,EAAE,sBAAsB,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { BrowserforcePlugin } from '../../plugin.js';
|
|
2
|
+
const BASE_PATH = 'lightning/setup/ThemingAndBranding/home';
|
|
3
|
+
// Spring 25 changed "lightning-datatable" to "one-theme-datatable"
|
|
4
|
+
const THEME_ROW_SELECTOR = '#setupComponent table > tbody > tr';
|
|
5
|
+
const DEVELOPER_NAMES_SELECTOR = `${THEME_ROW_SELECTOR} > td:nth-child(2) > lightning-primitive-cell-factory lightning-base-formatted-text`;
|
|
6
|
+
const STATES_SELECTOR = `${THEME_ROW_SELECTOR} > td:nth-child(6) > lightning-primitive-cell-factory`;
|
|
7
|
+
export class LightningExperienceSettings extends BrowserforcePlugin {
|
|
8
|
+
async setupDOMObserver(page, elementName, callbackName) {
|
|
9
|
+
await page.evaluate(({ elementName, callbackName, }) => {
|
|
10
|
+
const observer = new MutationObserver((mutations) => {
|
|
11
|
+
for (const mutation of mutations) {
|
|
12
|
+
for (const node of Array.from(mutation.addedNodes)) {
|
|
13
|
+
if (node instanceof Element &&
|
|
14
|
+
node.tagName.toLowerCase() === elementName) {
|
|
15
|
+
observer.disconnect();
|
|
16
|
+
// Call the exposed function to handle the element
|
|
17
|
+
window[callbackName]();
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
observer.observe(document.body, { childList: true, subtree: false });
|
|
24
|
+
// Clean up observer after navigation starts (element won't appear)
|
|
25
|
+
window.addEventListener('beforeunload', () => {
|
|
26
|
+
observer.disconnect();
|
|
27
|
+
}, { once: true });
|
|
28
|
+
}, { elementName, callbackName });
|
|
29
|
+
}
|
|
30
|
+
async retrieve() {
|
|
31
|
+
const page = await this.browserforce.openPage(BASE_PATH);
|
|
32
|
+
const themes = await this.getThemeData(page);
|
|
33
|
+
const activeTheme = themes.find((theme) => theme.isActive);
|
|
34
|
+
const response = {
|
|
35
|
+
activeThemeName: activeTheme.developerName,
|
|
36
|
+
};
|
|
37
|
+
await page.close();
|
|
38
|
+
return response;
|
|
39
|
+
}
|
|
40
|
+
async apply(config) {
|
|
41
|
+
const page = await this.browserforce.openPage(BASE_PATH);
|
|
42
|
+
await this.setActiveTheme(page, config.activeThemeName);
|
|
43
|
+
await page.close();
|
|
44
|
+
}
|
|
45
|
+
async getThemeData(page) {
|
|
46
|
+
await page.locator(THEME_ROW_SELECTOR).first().waitFor();
|
|
47
|
+
const rowLocator = page.locator(THEME_ROW_SELECTOR);
|
|
48
|
+
const rowCount = await rowLocator.count();
|
|
49
|
+
await page.locator(DEVELOPER_NAMES_SELECTOR).first().waitFor();
|
|
50
|
+
const developerNameLocator = page.locator(DEVELOPER_NAMES_SELECTOR);
|
|
51
|
+
const stateLocator = page.locator(STATES_SELECTOR);
|
|
52
|
+
const themes = [];
|
|
53
|
+
for (let i = 0; i < rowCount; i++) {
|
|
54
|
+
const developerName = await developerNameLocator.nth(i).innerText();
|
|
55
|
+
const hasIcon = await stateLocator
|
|
56
|
+
.nth(i)
|
|
57
|
+
.evaluate((cell) => cell.shadowRoot?.querySelector('lightning-primitive-icon') !== null);
|
|
58
|
+
themes.push({
|
|
59
|
+
developerName,
|
|
60
|
+
isActive: hasIcon,
|
|
61
|
+
rowLocator: rowLocator.nth(i),
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
return themes;
|
|
65
|
+
}
|
|
66
|
+
async setActiveTheme(page, themeDeveloperName) {
|
|
67
|
+
const data = await this.getThemeData(page);
|
|
68
|
+
const theme = data.find((theme) => theme.developerName === themeDeveloperName);
|
|
69
|
+
if (!theme) {
|
|
70
|
+
throw new Error(`Could not find theme "${themeDeveloperName}" in list of themes: ${data.map((d) => d.developerName)}`);
|
|
71
|
+
}
|
|
72
|
+
const newActiveThemeRowLocator = theme.rowLocator;
|
|
73
|
+
await page
|
|
74
|
+
.locator(`${THEME_ROW_SELECTOR} lightning-button-menu`)
|
|
75
|
+
.first()
|
|
76
|
+
.waitFor({ state: 'visible' });
|
|
77
|
+
const menuButton = newActiveThemeRowLocator.locator('td lightning-primitive-cell-factory lightning-primitive-cell-actions lightning-button-menu');
|
|
78
|
+
await menuButton.click();
|
|
79
|
+
await page
|
|
80
|
+
.locator(`${THEME_ROW_SELECTOR} lightning-button-menu slot lightning-menu-item`)
|
|
81
|
+
.first()
|
|
82
|
+
.waitFor({ state: 'visible' });
|
|
83
|
+
const menuItems = menuButton.locator('slot lightning-menu-item');
|
|
84
|
+
const menuItemCount = await menuItems.count();
|
|
85
|
+
// second last item: [show, activate, preview]
|
|
86
|
+
const activateMenuItem = menuItems.nth(menuItemCount - 2);
|
|
87
|
+
await activateMenuItem.click();
|
|
88
|
+
// When switching from a SDLS2 to a SLDS1 theme, the following modal appears:
|
|
89
|
+
// Activate this theme?
|
|
90
|
+
// This theme uses SLDS 1. When you activate this theme, you also disable SLDS 2.
|
|
91
|
+
// - Never Mind
|
|
92
|
+
// - Activate
|
|
93
|
+
const confirmButton = await page.locator('lightning-modal lightning-button[variant="brand"]');
|
|
94
|
+
if (await confirmButton.isVisible()) {
|
|
95
|
+
await confirmButton.waitFor({ state: 'visible' });
|
|
96
|
+
await confirmButton.click();
|
|
97
|
+
}
|
|
98
|
+
await page.locator('span.breadcrumbDetail.uiOutputText').waitFor();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/lightning-experience-settings/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { BrowserforcePlugin } from '../../plugin.js';
|
|
2
|
+
export type Config = {
|
|
3
|
+
enabled: boolean;
|
|
4
|
+
};
|
|
5
|
+
export declare class LinkedInSalesNavigatorSettings extends BrowserforcePlugin {
|
|
6
|
+
retrieve(definition?: Config): Promise<Config>;
|
|
7
|
+
apply(config: Config): Promise<void>;
|
|
8
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import assert from 'assert';
|
|
2
|
+
import { LinkedInSalesNavigatorSettings } from './index.js';
|
|
3
|
+
describe(LinkedInSalesNavigatorSettings.name, function () {
|
|
4
|
+
let plugin;
|
|
5
|
+
before(() => {
|
|
6
|
+
plugin = new LinkedInSalesNavigatorSettings(global.bf);
|
|
7
|
+
});
|
|
8
|
+
const configEnabled = {
|
|
9
|
+
enabled: true,
|
|
10
|
+
};
|
|
11
|
+
const configDisabled = {
|
|
12
|
+
enabled: false,
|
|
13
|
+
};
|
|
14
|
+
it('should enable', async () => {
|
|
15
|
+
await plugin.run(configEnabled);
|
|
16
|
+
});
|
|
17
|
+
it('should already be enabled', async () => {
|
|
18
|
+
const res = await plugin.run(configEnabled);
|
|
19
|
+
assert.deepStrictEqual(res, { message: 'no action necessary' });
|
|
20
|
+
});
|
|
21
|
+
it('should disable', async () => {
|
|
22
|
+
await plugin.run(configDisabled);
|
|
23
|
+
});
|
|
24
|
+
it('should already be disabled', async () => {
|
|
25
|
+
const res = await plugin.run(configDisabled);
|
|
26
|
+
assert.deepStrictEqual(res, { message: 'no action necessary' });
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
//# sourceMappingURL=index.e2e-spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.e2e-spec.js","sourceRoot":"","sources":["../../../src/plugins/linkedin-sales-navigator-settings/index.e2e-spec.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAU,8BAA8B,EAAE,MAAM,YAAY,CAAC;AAEpE,QAAQ,CAAC,8BAA8B,CAAC,IAAI,EAAE;IAC5C,IAAI,MAAsC,CAAC;IAC3C,MAAM,CAAC,GAAG,EAAE;QACV,MAAM,GAAG,IAAI,8BAA8B,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,MAAM,aAAa,GAAW;QAC5B,OAAO,EAAE,IAAI;KACd,CAAC;IACF,MAAM,cAAc,GAAW;QAC7B,OAAO,EAAE,KAAK;KACf,CAAC;IAEF,EAAE,CAAC,eAAe,EAAE,KAAK,IAAI,EAAE;QAC7B,MAAM,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QACzC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC5C,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,gBAAgB,EAAE,KAAK,IAAI,EAAE;QAC9B,MAAM,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC7C,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { BrowserforcePlugin } from '../../plugin.js';
|
|
2
|
+
import { LinkedInSalesNavigatorPage } from './page.js';
|
|
3
|
+
export class LinkedInSalesNavigatorSettings extends BrowserforcePlugin {
|
|
4
|
+
async retrieve(definition) {
|
|
5
|
+
const result = { enabled: false };
|
|
6
|
+
const page = new LinkedInSalesNavigatorPage(await this.browserforce.openPage(LinkedInSalesNavigatorPage.getUrl()), this.browserforce);
|
|
7
|
+
result.enabled = await page.getStatus();
|
|
8
|
+
return result;
|
|
9
|
+
}
|
|
10
|
+
async apply(config) {
|
|
11
|
+
const page = new LinkedInSalesNavigatorPage(await this.browserforce.openPage(LinkedInSalesNavigatorPage.getUrl()), this.browserforce);
|
|
12
|
+
await page.setStatus(config.enabled);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/linkedin-sales-navigator-settings/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAC;AAMvD,MAAM,OAAO,8BAA+B,SAAQ,kBAAkB;IAC7D,KAAK,CAAC,QAAQ,CAAC,UAAmB;QACvC,MAAM,MAAM,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,IAAI,0BAA0B,CACzC,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,0BAA0B,CAAC,MAAM,EAAE,CAAC,EACrE,IAAI,CAAC,YAAY,CAClB,CAAC;QACF,MAAM,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACxC,OAAO,MAAM,CAAC;IAChB,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,MAAc;QAC/B,MAAM,IAAI,GAAG,IAAI,0BAA0B,CACzC,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,0BAA0B,CAAC,MAAM,EAAE,CAAC,EACrE,IAAI,CAAC,YAAY,CAClB,CAAC;QACF,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Page } from 'playwright';
|
|
2
|
+
import { Browserforce } from '../../browserforce.js';
|
|
3
|
+
export declare class LinkedInSalesNavigatorPage {
|
|
4
|
+
private page;
|
|
5
|
+
private browserforce;
|
|
6
|
+
constructor(page: Page, browserforce: Browserforce);
|
|
7
|
+
static getUrl(): string;
|
|
8
|
+
getStatus(): Promise<boolean>;
|
|
9
|
+
setStatus(enable: boolean): Promise<void>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { throwPageErrors } from '../../browserforce.js';
|
|
2
|
+
const ENABLE_TOGGLE = 'div[data-aura-class="setup_sales_linkedinLinkedInSetupRow"] input[type="checkbox"]:not(:disabled)';
|
|
3
|
+
const CONFIRM_CHECKBOX = 'lightning-input lightning-primitive-input-checkbox input[name="LinkedIn Sales Navigator Integration Acceptance Checkbox"]:not(:disabled)';
|
|
4
|
+
const ACCEPT_BUTTON = 'section[data-aura-class="setup_sales_linkedinLinkedInSetupAcceptTermsModal"] div div button:not(:disabled):nth-child(2)';
|
|
5
|
+
export class LinkedInSalesNavigatorPage {
|
|
6
|
+
page;
|
|
7
|
+
browserforce;
|
|
8
|
+
constructor(page, browserforce) {
|
|
9
|
+
this.page = page;
|
|
10
|
+
this.browserforce = browserforce;
|
|
11
|
+
}
|
|
12
|
+
static getUrl() {
|
|
13
|
+
return 'lightning/setup/LinkedInSalesNavigatorPage/home';
|
|
14
|
+
}
|
|
15
|
+
async getStatus() {
|
|
16
|
+
await this.page.locator(ENABLE_TOGGLE).waitFor();
|
|
17
|
+
const isEnabled = await this.page.locator(ENABLE_TOGGLE).isChecked();
|
|
18
|
+
await this.page.close();
|
|
19
|
+
return isEnabled;
|
|
20
|
+
}
|
|
21
|
+
async setStatus(enable) {
|
|
22
|
+
// NOTE: Unfortunately a simple click() on the locator does not work here
|
|
23
|
+
await this.page.locator(ENABLE_TOGGLE).waitFor();
|
|
24
|
+
await this.page
|
|
25
|
+
.locator(ENABLE_TOGGLE)
|
|
26
|
+
.evaluate((checkbox) => checkbox.click());
|
|
27
|
+
if (enable) {
|
|
28
|
+
await this.page.locator(CONFIRM_CHECKBOX).waitFor();
|
|
29
|
+
await this.page
|
|
30
|
+
.locator(CONFIRM_CHECKBOX)
|
|
31
|
+
.evaluate((checkbox) => checkbox.click());
|
|
32
|
+
await this.page.locator(ACCEPT_BUTTON).waitFor();
|
|
33
|
+
await this.page
|
|
34
|
+
.locator(ACCEPT_BUTTON)
|
|
35
|
+
.evaluate((button) => button.click());
|
|
36
|
+
}
|
|
37
|
+
await throwPageErrors(this.page);
|
|
38
|
+
await this.browserforce.waitForIdle(this.page);
|
|
39
|
+
await this.page.close();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../../src/plugins/linkedin-sales-navigator-settings/page.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAEtE,MAAM,aAAa,GACjB,mGAAmG,CAAC;AACtG,MAAM,gBAAgB,GACpB,0IAA0I,CAAC;AAC7I,MAAM,aAAa,GACjB,yHAAyH,CAAC;AAE5H,MAAM,OAAO,0BAA0B;IAC7B,IAAI,CAAO;IACX,YAAY,CAAe;IAEnC,YAAY,IAAU,EAAE,YAA0B;QAChD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAEM,MAAM,CAAC,MAAM;QAClB,OAAO,iDAAiD,CAAC;IAC3D,CAAC;IAEM,KAAK,CAAC,SAAS;QACpB,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE,CAAC;QACjD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,SAAS,EAAE,CAAC;QACrE,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,MAAe;QACpC,yEAAyE;QACzE,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE,CAAC;QACjD,MAAM,IAAI,CAAC,IAAI;aACZ,OAAO,CAAC,aAAa,CAAC;aACtB,QAAQ,CAAC,CAAC,QAA0B,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;QAE9D,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,OAAO,EAAE,CAAC;YACpD,MAAM,IAAI,CAAC,IAAI;iBACZ,OAAO,CAAC,gBAAgB,CAAC;iBACzB,QAAQ,CAAC,CAAC,QAA0B,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;YAC9D,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE,CAAC;YACjD,MAAM,IAAI,CAAC,IAAI;iBACZ,OAAO,CAAC,aAAa,CAAC;iBACtB,QAAQ,CAAC,CAAC,MAAyB,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { BrowserforcePlugin } from '../../plugin.js';
|
|
2
|
+
type Config = {
|
|
3
|
+
enableStatusBasedCapacityModel?: boolean;
|
|
4
|
+
};
|
|
5
|
+
export declare class OmniChannelSettings extends BrowserforcePlugin {
|
|
6
|
+
retrieve(definition?: Config): Promise<Config>;
|
|
7
|
+
apply(config: Config): Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import assert from 'assert';
|
|
2
|
+
import { OmniChannelSettings } from './index.js';
|
|
3
|
+
describe(OmniChannelSettings.name, function () {
|
|
4
|
+
this.timeout('10m');
|
|
5
|
+
let plugin;
|
|
6
|
+
before(() => {
|
|
7
|
+
plugin = new OmniChannelSettings(global.bf);
|
|
8
|
+
});
|
|
9
|
+
const configEnableStatusBasedCapacityModel = {
|
|
10
|
+
enableStatusBasedCapacityModel: true,
|
|
11
|
+
};
|
|
12
|
+
const configDisableStatusBasedCapacityModel = {
|
|
13
|
+
enableStatusBasedCapacityModel: false,
|
|
14
|
+
};
|
|
15
|
+
it('should enable status based capacity model', async () => {
|
|
16
|
+
await plugin.run(configEnableStatusBasedCapacityModel);
|
|
17
|
+
});
|
|
18
|
+
it('should verify status based capacity model is enabled', async () => {
|
|
19
|
+
const res = await plugin.retrieve();
|
|
20
|
+
assert.deepStrictEqual(res, configEnableStatusBasedCapacityModel);
|
|
21
|
+
});
|
|
22
|
+
it('should disable status based capacity model', async () => {
|
|
23
|
+
await plugin.run(configDisableStatusBasedCapacityModel);
|
|
24
|
+
});
|
|
25
|
+
it('should verify status based capacity model is disabled', async () => {
|
|
26
|
+
const res = await plugin.retrieve();
|
|
27
|
+
assert.deepStrictEqual(res, configDisableStatusBasedCapacityModel);
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
//# sourceMappingURL=index.e2e-spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.e2e-spec.js","sourceRoot":"","sources":["../../../src/plugins/omni-channel-settings/index.e2e-spec.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD,QAAQ,CAAC,mBAAmB,CAAC,IAAI,EAAE;IACjC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,IAAI,MAA2B,CAAC;IAChC,MAAM,CAAC,GAAG,EAAE;QACV,MAAM,GAAG,IAAI,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,MAAM,oCAAoC,GAAG;QAC3C,8BAA8B,EAAE,IAAI;KACrC,CAAC;IACF,MAAM,qCAAqC,GAAG;QAC5C,8BAA8B,EAAE,KAAK;KACtC,CAAC;IAEF,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,MAAM,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpC,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,oCAAoC,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,MAAM,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACrE,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpC,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,qCAAqC,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { BrowserforcePlugin } from '../../plugin.js';
|
|
2
|
+
const BASE_PATH = 'omnichannel/settings.apexp';
|
|
3
|
+
const SAVE_BUTTON_SELECTOR = 'input[id$=":save"]';
|
|
4
|
+
const STATUS_CAPACITY_TOGGLE_SELECTOR = 'input[id$=":toggleOmniStatusCapModelPref"]';
|
|
5
|
+
export class OmniChannelSettings extends BrowserforcePlugin {
|
|
6
|
+
async retrieve(definition) {
|
|
7
|
+
const page = await this.browserforce.openPage(BASE_PATH);
|
|
8
|
+
const enableStatusBasedCapacityModel = await page
|
|
9
|
+
.locator(STATUS_CAPACITY_TOGGLE_SELECTOR)
|
|
10
|
+
.evaluate((el) => el.getAttribute('checked') === 'checked' ? true : false);
|
|
11
|
+
return { enableStatusBasedCapacityModel };
|
|
12
|
+
}
|
|
13
|
+
async apply(config) {
|
|
14
|
+
const page = await this.browserforce.openPage(BASE_PATH);
|
|
15
|
+
await page.locator(STATUS_CAPACITY_TOGGLE_SELECTOR).click();
|
|
16
|
+
await page.locator(SAVE_BUTTON_SELECTOR).click();
|
|
17
|
+
await page.waitForLoadState('networkidle');
|
|
18
|
+
await page.close();
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/omni-channel-settings/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,SAAS,GAAG,4BAA4B,CAAC;AAE/C,MAAM,oBAAoB,GAAG,oBAAoB,CAAC;AAClD,MAAM,+BAA+B,GACnC,4CAA4C,CAAC;AAM/C,MAAM,OAAO,mBAAoB,SAAQ,kBAAkB;IAClD,KAAK,CAAC,QAAQ,CAAC,UAAmB;QACvC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAEzD,MAAM,8BAA8B,GAAG,MAAM,IAAI;aAC9C,OAAO,CAAC,+BAA+B,CAAC;aACxC,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,CACf,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CACxD,CAAC;QAEJ,OAAO,EAAE,8BAA8B,EAAE,CAAC;IAC5C,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,MAAc;QAC/B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAEzD,MAAM,IAAI,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC,KAAK,EAAE,CAAC;QAE5D,MAAM,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC;QAEjD,MAAM,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;QAC3C,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { BrowserforcePlugin } from '../../plugin.js';
|
|
2
|
+
type Config = {
|
|
3
|
+
enabled: boolean;
|
|
4
|
+
};
|
|
5
|
+
export declare class OpportunitySplits extends BrowserforcePlugin {
|
|
6
|
+
retrieve(definition?: Config): Promise<Config>;
|
|
7
|
+
apply(config: Config): Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import assert from 'assert';
|
|
2
|
+
import * as child from 'child_process';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import * as path from 'path';
|
|
5
|
+
import { OpportunitySplits } from './index.js';
|
|
6
|
+
const __dirname = fileURLToPath(new URL('.', import.meta.url));
|
|
7
|
+
describe(OpportunitySplits.name, function () {
|
|
8
|
+
this.timeout('15m');
|
|
9
|
+
this.slow('1m');
|
|
10
|
+
let plugin;
|
|
11
|
+
before(() => {
|
|
12
|
+
plugin = new OpportunitySplits(global.bf);
|
|
13
|
+
});
|
|
14
|
+
const configEnabled = {
|
|
15
|
+
enabled: true,
|
|
16
|
+
};
|
|
17
|
+
const configDisabled = {
|
|
18
|
+
enabled: false,
|
|
19
|
+
};
|
|
20
|
+
it('should enable Opportunity Teams as prerequisite', () => {
|
|
21
|
+
const sourceDeployCmd = child.spawnSync('sf', [
|
|
22
|
+
'project',
|
|
23
|
+
'deploy',
|
|
24
|
+
'start',
|
|
25
|
+
'-d',
|
|
26
|
+
path.join(__dirname, 'sfdx-source'),
|
|
27
|
+
'--json',
|
|
28
|
+
]);
|
|
29
|
+
assert.deepStrictEqual(sourceDeployCmd.status, 0, sourceDeployCmd.output.toString());
|
|
30
|
+
});
|
|
31
|
+
it('should enable', async () => {
|
|
32
|
+
await plugin.run(configEnabled);
|
|
33
|
+
});
|
|
34
|
+
it('should be enabled', async () => {
|
|
35
|
+
const state = await plugin.retrieve();
|
|
36
|
+
assert.deepStrictEqual(state, configEnabled);
|
|
37
|
+
});
|
|
38
|
+
it('should disable', async () => {
|
|
39
|
+
await plugin.apply(configDisabled);
|
|
40
|
+
});
|
|
41
|
+
it('should be disabled', async () => {
|
|
42
|
+
const state = await plugin.retrieve();
|
|
43
|
+
assert.deepStrictEqual(state, configDisabled);
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
//# sourceMappingURL=index.e2e-spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.e2e-spec.js","sourceRoot":"","sources":["../../../src/plugins/opportunity-splits/index.e2e-spec.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,KAAK,KAAK,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,QAAQ,CAAC,iBAAiB,CAAC,IAAI,EAAE;IAC/B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,IAAI,MAAyB,CAAC;IAC9B,MAAM,CAAC,GAAG,EAAE;QACV,MAAM,GAAG,IAAI,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG;QACpB,OAAO,EAAE,IAAI;KACd,CAAC;IACF,MAAM,cAAc,GAAG;QACrB,OAAO,EAAE,KAAK;KACf,CAAC;IACF,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,eAAe,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE;YAC5C,SAAS;YACT,QAAQ;YACR,OAAO;YACP,IAAI;YACJ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC;YACnC,QAAQ;SACT,CAAC,CAAC;QACH,MAAM,CAAC,eAAe,CACpB,eAAe,CAAC,MAAM,EACtB,CAAC,EACD,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,CAClC,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,eAAe,EAAE,KAAK,IAAI,EAAE;QAC7B,MAAM,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;QACjC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtC,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,gBAAgB,EAAE,KAAK,IAAI,EAAE;QAC9B,MAAM,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;QAClC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtC,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { BrowserforcePlugin } from '../../plugin.js';
|
|
2
|
+
import { OverviewPage } from './pages/overview.js';
|
|
3
|
+
import { SetupPage } from './pages/setup.js';
|
|
4
|
+
export class OpportunitySplits extends BrowserforcePlugin {
|
|
5
|
+
async retrieve(definition) {
|
|
6
|
+
const page = await this.browserforce.openPage(OverviewPage.PATH);
|
|
7
|
+
const overviewPage = new OverviewPage(page);
|
|
8
|
+
const response = {
|
|
9
|
+
enabled: await overviewPage.isEnabled(),
|
|
10
|
+
};
|
|
11
|
+
await page.close();
|
|
12
|
+
return response;
|
|
13
|
+
}
|
|
14
|
+
async apply(config) {
|
|
15
|
+
if (config.enabled) {
|
|
16
|
+
const page = await this.browserforce.openPage(SetupPage.PATH);
|
|
17
|
+
const setupPage = new SetupPage(page);
|
|
18
|
+
const layoutSelectionPage = await setupPage.enable();
|
|
19
|
+
const overviewPage = await layoutSelectionPage.choose();
|
|
20
|
+
await overviewPage.waitUntilCompleted();
|
|
21
|
+
await page.close();
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
const page = await this.browserforce.openPage(OverviewPage.PATH);
|
|
25
|
+
const overviewPage = new OverviewPage(page);
|
|
26
|
+
await overviewPage.disable();
|
|
27
|
+
await overviewPage.waitUntilCompleted();
|
|
28
|
+
await page.close();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/opportunity-splits/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAM7C,MAAM,OAAO,iBAAkB,SAAQ,kBAAkB;IAChD,KAAK,CAAC,QAAQ,CAAC,UAAmB;QACvC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACjE,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG;YACf,OAAO,EAAE,MAAM,YAAY,CAAC,SAAS,EAAE;SACxC,CAAC;QACF,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,MAAc;QAC/B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC9D,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;YACtC,MAAM,mBAAmB,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,CAAC;YACrD,MAAM,YAAY,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC;YACxD,MAAM,YAAY,CAAC,kBAAkB,EAAE,CAAC;YACxC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YACjE,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;YAC5C,MAAM,YAAY,CAAC,OAAO,EAAE,CAAC;YAC7B,MAAM,YAAY,CAAC,kBAAkB,EAAE,CAAC;YACxC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { OverviewPage } from './overview.js';
|
|
2
|
+
const SAVE_BUTTON = 'input[id$=":save"]';
|
|
3
|
+
export class LayoutSelectionPage {
|
|
4
|
+
static PATH = 'opp/opportunitySplitSetupLayout.apexp?setupid=OpportunitySplitSetup';
|
|
5
|
+
page;
|
|
6
|
+
constructor(page) {
|
|
7
|
+
this.page = page;
|
|
8
|
+
}
|
|
9
|
+
async choose() {
|
|
10
|
+
await this.page.locator(SAVE_BUTTON).click();
|
|
11
|
+
await this.page.waitForLoadState('networkidle');
|
|
12
|
+
return new OverviewPage(this.page);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=layout-selection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout-selection.js","sourceRoot":"","sources":["../../../../src/plugins/opportunity-splits/pages/layout-selection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,WAAW,GAAG,oBAAoB,CAAC;AAEzC,MAAM,OAAO,mBAAmB;IAC9B,MAAM,CAAC,IAAI,GACT,qEAAqE,CAAC;IAChE,IAAI,CAAO;IAEnB,YAAY,IAAU;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAEM,KAAK,CAAC,MAAM;QACjB,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC;QAC7C,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;QAChD,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Page } from 'playwright';
|
|
2
|
+
export declare class OverviewPage {
|
|
3
|
+
static PATH: string;
|
|
4
|
+
private page;
|
|
5
|
+
constructor(page: Page);
|
|
6
|
+
isEnabled(): Promise<boolean>;
|
|
7
|
+
waitUntilCompleted(): Promise<void>;
|
|
8
|
+
isInProgress(): Promise<boolean>;
|
|
9
|
+
disable(): Promise<OverviewPage>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
const IN_PROGRESS = '#enablingInProgress, #disablingInProgress';
|
|
2
|
+
const COMPLETED = '#prefSettingSucceeded';
|
|
3
|
+
const DISABLE_LINK = 'div[id*=":disable_form:"] a';
|
|
4
|
+
const DISABLE_CONFIRM_CHECKBOX = 'input#dis_confirm';
|
|
5
|
+
const DISABLE_CONFIRM_BUTTON = 'input#splitsDisableConfirmDialog_overlayConfirmButton';
|
|
6
|
+
export class OverviewPage {
|
|
7
|
+
static PATH = 'opp/opportunitySplitSetupOverview.apexp?setupid=OpportunitySplitSetup';
|
|
8
|
+
page;
|
|
9
|
+
constructor(page) {
|
|
10
|
+
this.page = page;
|
|
11
|
+
}
|
|
12
|
+
async isEnabled() {
|
|
13
|
+
await this.waitUntilCompleted();
|
|
14
|
+
return (this.page.url().includes(OverviewPage.PATH) &&
|
|
15
|
+
(await this.page.locator(DISABLE_LINK).count()) > 0);
|
|
16
|
+
}
|
|
17
|
+
async waitUntilCompleted() {
|
|
18
|
+
if (await this.isInProgress()) {
|
|
19
|
+
await this.page.locator(COMPLETED).waitFor({ timeout: 10 * 60 * 1000 }); // 10 minutes
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
async isInProgress() {
|
|
23
|
+
return (await this.page.locator(IN_PROGRESS).count()) > 0;
|
|
24
|
+
}
|
|
25
|
+
async disable() {
|
|
26
|
+
await this.page.locator(DISABLE_LINK).click();
|
|
27
|
+
await this.page.locator(DISABLE_CONFIRM_CHECKBOX).click();
|
|
28
|
+
await this.page.locator(DISABLE_CONFIRM_BUTTON).click();
|
|
29
|
+
await this.page.waitForLoadState('networkidle');
|
|
30
|
+
return this;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=overview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overview.js","sourceRoot":"","sources":["../../../../src/plugins/opportunity-splits/pages/overview.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,GAAG,2CAA2C,CAAC;AAChE,MAAM,SAAS,GAAG,uBAAuB,CAAC;AAC1C,MAAM,YAAY,GAAG,6BAA6B,CAAC;AACnD,MAAM,wBAAwB,GAAG,mBAAmB,CAAC;AACrD,MAAM,sBAAsB,GAC1B,uDAAuD,CAAC;AAE1D,MAAM,OAAO,YAAY;IACvB,MAAM,CAAC,IAAI,GACT,uEAAuE,CAAC;IAClE,IAAI,CAAO;IAEnB,YAAY,IAAU;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAEM,KAAK,CAAC,SAAS;QACpB,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAChC,OAAO,CACL,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC;YAC3C,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CACpD,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,kBAAkB;QAC7B,IAAI,MAAM,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;YAC9B,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,aAAa;QACxF,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,YAAY;QACvB,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;IAC5D,CAAC;IAEM,KAAK,CAAC,OAAO;QAClB,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,KAAK,EAAE,CAAC;QAC9C,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,KAAK,EAAE,CAAC;QAC1D,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE,CAAC;QACxD,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { LayoutSelectionPage } from './layout-selection.js';
|
|
2
|
+
const SAVE_BUTTON = 'input[id$=":form:SaveButton"]';
|
|
3
|
+
const MODAL_CONFIRM_BUTTON = 'input[id="splitsMassOperationConfirmDialog_overlayConfirmButton"]';
|
|
4
|
+
export class SetupPage {
|
|
5
|
+
static PATH = 'opp/opportunitySplitSetupEdit.apexp?setupid=OpportunitySplitSetup';
|
|
6
|
+
page;
|
|
7
|
+
constructor(page) {
|
|
8
|
+
this.page = page;
|
|
9
|
+
}
|
|
10
|
+
async enable() {
|
|
11
|
+
await this.page.locator(SAVE_BUTTON).click();
|
|
12
|
+
await this.page.locator(MODAL_CONFIRM_BUTTON).click();
|
|
13
|
+
await this.page.waitForLoadState('networkidle');
|
|
14
|
+
return new LayoutSelectionPage(this.page);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../../src/plugins/opportunity-splits/pages/setup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,WAAW,GAAG,+BAA+B,CAAC;AACpD,MAAM,oBAAoB,GACxB,mEAAmE,CAAC;AAEtE,MAAM,OAAO,SAAS;IACpB,MAAM,CAAC,IAAI,GACT,mEAAmE,CAAC;IAC9D,IAAI,CAAO;IAEnB,YAAY,IAAU;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAEM,KAAK,CAAC,MAAM;QACjB,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC;QAC7C,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC;QACtD,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;QAChD,OAAO,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { BrowserforcePlugin } from '../../plugin.js';
|
|
2
|
+
type PermissionSet = {
|
|
3
|
+
permissionSetName: string;
|
|
4
|
+
servicePresenceStatuses: string[];
|
|
5
|
+
};
|
|
6
|
+
export declare class PermissionSets extends BrowserforcePlugin {
|
|
7
|
+
retrieve(definition?: PermissionSet[]): Promise<PermissionSet[]>;
|
|
8
|
+
apply(plan: PermissionSet[]): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|