Skip to content

Commit 097d727

Browse files
authored
Merge pull request #231 from Foxy/release/1.52.0
chore: release 1.52.0
2 parents 0da21bd + e8b0138 commit 097d727

File tree

63 files changed

+1803
-666
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+1803
-666
lines changed

.devcontainer/devcontainer.json

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"name": "foxy-elements",
3+
"image": "mcr.microsoft.com/devcontainers/javascript-node:1-20-bookworm",
4+
"features": {
5+
"ghcr.io/rocker-org/devcontainer-features/apt-packages:1": {
6+
"packages": "chromium"
7+
}
8+
},
9+
"mounts": [
10+
"source=${localEnv:HOME}/.ssh,target=/home/node/.ssh,type=bind,consistency=cached"
11+
],
12+
"forwardPorts": [8000],
13+
"postCreateCommand": "npm install"
14+
}

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
## editors
22
/.idea
33
/.nova
4+
/.vscode
45

56
## system files
67
.DS_Store

package-lock.json

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
"prepack": "npm run lint && rimraf dist && node ./.build/compile-for-npm.js && rollup -c"
2828
},
2929
"dependencies": {
30-
"@foxy.io/sdk": "^1.15.0",
30+
"@foxy.io/sdk": "^1.16.1",
3131
"@open-wc/lit-helpers": "^0.3.12",
3232
"@open-wc/scoped-elements": "^1.2.1",
3333
"@polymer/iron-icons": "^3.0.1",

src/elements/public/AppliedCouponCodeForm/AppliedCouponCodeForm.test.ts

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,23 @@ import './index';
55

66
import { expect, fixture, html, waitUntil } from '@open-wc/testing';
77
import { AppliedCouponCodeForm as Form } from './AppliedCouponCodeForm';
8-
import { InternalCheckboxGroupControl } from '../../internal/InternalCheckboxGroupControl/InternalCheckboxGroupControl';
8+
import { InternalSummaryControl } from '../../internal/InternalSummaryControl/InternalSummaryControl';
9+
import { InternalSwitchControl } from '../../internal/InternalSwitchControl/InternalSwitchControl';
910
import { InternalTextControl } from '../../internal/InternalTextControl/InternalTextControl';
1011
import { InternalForm } from '../../internal/InternalForm/InternalForm';
1112
import { createRouter } from '../../../server';
1213
import { getTestData } from '../../../testgen/getTestData';
1314
import { stub } from 'sinon';
1415

1516
describe('AppliedCouponCodeForm', () => {
16-
it('imports and registers foxy-internal-checkbox-group-control element', () => {
17-
const constructor = customElements.get('foxy-internal-checkbox-group-control');
18-
expect(constructor).to.equal(InternalCheckboxGroupControl);
17+
it('imports and registers foxy-internal-summary-control element', () => {
18+
const constructor = customElements.get('foxy-internal-summary-control');
19+
expect(constructor).to.equal(InternalSummaryControl);
20+
});
21+
22+
it('imports and registers foxy-internal-switch-control element', () => {
23+
const constructor = customElements.get('foxy-internal-switch-control');
24+
expect(constructor).to.equal(InternalSwitchControl);
1925
});
2026

2127
it('imports and registers foxy-internal-text-control element', () => {
@@ -91,26 +97,15 @@ describe('AppliedCouponCodeForm', () => {
9197
expect(control).to.have.property('helperText', 'code.helper_text_existing');
9298
});
9399

94-
it('renders a checkbox group control for "ignore_usage_limits" field in template state', async () => {
100+
it('renders a switch control for "ignore_usage_limits" field in template state', async () => {
95101
const element = await fixture<Form>(
96102
html`<foxy-applied-coupon-code-form></foxy-applied-coupon-code-form>`
97103
);
98104

99-
const control = element.renderRoot.querySelector<InternalCheckboxGroupControl>(
105+
const control = element.renderRoot.querySelector<InternalSwitchControl>(
100106
'[infer="ignore-usage-limits"]'
101107
);
102108

103-
const options = [{ value: 'checked', label: 'option_checked' }];
104-
105-
expect(control).to.be.instanceOf(InternalCheckboxGroupControl);
106-
expect(control).to.have.deep.property('options', options);
107-
108-
control?.setValue(['checked']);
109-
expect(control?.getValue()).to.deep.equal(['checked']);
110-
expect(element).to.have.nested.property('form.ignore_usage_limits', true);
111-
112-
control?.setValue([]);
113-
expect(control?.getValue()).to.deep.equal([]);
114-
expect(element).to.have.nested.property('form.ignore_usage_limits', false);
109+
expect(control).to.be.instanceOf(InternalSwitchControl);
115110
});
116111
});

src/elements/public/AppliedCouponCodeForm/AppliedCouponCodeForm.ts

Lines changed: 15 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,6 @@ export class AppliedCouponCodeForm extends Base<Data> {
2121
return [({ code: v }) => !!v || 'code:v8n_required'];
2222
}
2323

24-
private readonly __ignoreUsageLimitsOptions = [{ value: 'checked', label: 'option_checked' }];
25-
26-
private readonly __getIgnoreUsageLimitsValue = () => {
27-
return this.form.ignore_usage_limits ? ['checked'] : [];
28-
};
29-
30-
private readonly __setIgnoreUsageLimitsValue = (newValue: string[]) => {
31-
this.edit({ ignore_usage_limits: newValue.includes('checked') });
32-
};
33-
3424
get readonlySelector(): BooleanSelector {
3525
return this.data ? new BooleanSelector('not=delete') : super.readonlySelector;
3626
}
@@ -43,26 +33,21 @@ export class AppliedCouponCodeForm extends Base<Data> {
4333
return html`
4434
${this.renderHeader()}
4535
46-
<foxy-internal-text-control
47-
helper-text=${this.t(this.data ? 'code.helper_text_existing' : 'code.helper_text_new')}
48-
infer="code"
49-
>
50-
</foxy-internal-text-control>
51-
52-
${this.data
53-
? ''
54-
: html`
55-
<foxy-internal-checkbox-group-control
56-
infer="ignore-usage-limits"
57-
class="-my-xs"
58-
.getValue=${this.__getIgnoreUsageLimitsValue}
59-
.setValue=${this.__setIgnoreUsageLimitsValue}
60-
.options=${this.__ignoreUsageLimitsOptions}
61-
>
62-
</foxy-internal-checkbox-group-control>
63-
`}
64-
65-
<!-- -->
36+
<foxy-internal-summary-control infer="" label="" helper-text="">
37+
<foxy-internal-text-control
38+
helper-text=${this.t(this.data ? 'code.helper_text_existing' : 'code.helper_text_new')}
39+
layout="summary-item"
40+
infer="code"
41+
>
42+
</foxy-internal-text-control>
43+
44+
${this.data
45+
? ''
46+
: html`
47+
<foxy-internal-switch-control infer="ignore-usage-limits">
48+
</foxy-internal-switch-control>
49+
`}
50+
</foxy-internal-summary-control>
6651
6752
${super.renderBody()}
6853
`;

src/elements/public/AppliedCouponCodeForm/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import '../../internal/InternalCheckboxGroupControl/index';
1+
import '../../internal/InternalSummaryControl/index';
2+
import '../../internal/InternalSwitchControl/index';
23
import '../../internal/InternalTextControl/index';
34
import '../../internal/InternalForm/index';
45

src/elements/public/ClientForm/ClientForm.test.ts

Lines changed: 47 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ import { stub } from 'sinon';
1010
import { Data } from './types';
1111

1212
describe('ClientForm', () => {
13-
it('imports and defines foxy-internal-text-area-control', () => {
14-
expect(customElements.get('foxy-internal-text-area-control')).to.exist;
13+
it('imports and defines foxy-internal-summary-control', () => {
14+
expect(customElements.get('foxy-internal-summary-control')).to.exist;
1515
});
1616

1717
it('imports and defines foxy-internal-text-control', () => {
@@ -42,82 +42,108 @@ describe('ClientForm', () => {
4242
expect(renderHeaderMethod).to.have.been.called;
4343
});
4444

45+
it('renders a foxy-internal-summary-control for general section', async () => {
46+
const element = await fixture<Form>(html`<foxy-client-form></foxy-client-form>`);
47+
const control = element.renderRoot.querySelector('[infer="general"]');
48+
expect(control).to.be.instanceOf(customElements.get('foxy-internal-summary-control'));
49+
});
50+
51+
it('renders a foxy-internal-summary-control for project section', async () => {
52+
const element = await fixture<Form>(html`<foxy-client-form></foxy-client-form>`);
53+
const control = element.renderRoot.querySelector('[infer="project"]');
54+
expect(control).to.be.instanceOf(customElements.get('foxy-internal-summary-control'));
55+
});
56+
57+
it('renders a foxy-internal-summary-control for company section', async () => {
58+
const element = await fixture<Form>(html`<foxy-client-form></foxy-client-form>`);
59+
const control = element.renderRoot.querySelector('[infer="company"]');
60+
expect(control).to.be.instanceOf(customElements.get('foxy-internal-summary-control'));
61+
});
62+
63+
it('renders a foxy-internal-summary-control for contact section', async () => {
64+
const element = await fixture<Form>(html`<foxy-client-form></foxy-client-form>`);
65+
const control = element.renderRoot.querySelector('[infer="contact"]');
66+
expect(control).to.be.instanceOf(customElements.get('foxy-internal-summary-control'));
67+
});
68+
4569
it('renders a foxy-internal-text-control for client id', async () => {
4670
const element = await fixture<Form>(html`<foxy-client-form></foxy-client-form>`);
47-
const control = element.renderRoot.querySelector('[infer="client-id"]');
71+
const control = element.renderRoot.querySelector('[infer="general"] [infer="client-id"]');
4872
expect(control).to.be.instanceOf(customElements.get('foxy-internal-text-control'));
4973
});
5074

5175
it('renders a foxy-internal-text-control for client secret', async () => {
5276
const element = await fixture<Form>(html`<foxy-client-form></foxy-client-form>`);
53-
const control = element.renderRoot.querySelector('[infer="client-secret"]');
77+
const control = element.renderRoot.querySelector('[infer="general"] [infer="client-secret"]');
5478
expect(control).to.be.instanceOf(customElements.get('foxy-internal-text-control'));
5579
});
5680

5781
it('renders a foxy-internal-text-control for redirect uri', async () => {
5882
const element = await fixture<Form>(html`<foxy-client-form></foxy-client-form>`);
59-
const control = element.renderRoot.querySelector('[infer="redirect-uri"]');
83+
const control = element.renderRoot.querySelector('[infer="general"] [infer="redirect-uri"]');
6084
expect(control).to.be.instanceOf(customElements.get('foxy-internal-text-control'));
6185
});
6286

6387
it('renders a foxy-internal-text-control for project name', async () => {
6488
const element = await fixture<Form>(html`<foxy-client-form></foxy-client-form>`);
65-
const control = element.renderRoot.querySelector('[infer="project-name"]');
89+
const control = element.renderRoot.querySelector('[infer="project"] [infer="project-name"]');
6690
expect(control).to.be.instanceOf(customElements.get('foxy-internal-text-control'));
6791
});
6892

69-
it('renders a foxy-internal-text-area-control for project description', async () => {
93+
it('renders a foxy-internal-text-control for project description', async () => {
7094
const element = await fixture<Form>(html`<foxy-client-form></foxy-client-form>`);
71-
const control = element.renderRoot.querySelector('[infer="project-description"]');
72-
expect(control).to.be.instanceOf(customElements.get('foxy-internal-text-area-control'));
95+
const control = element.renderRoot.querySelector(
96+
'[infer="project"] [infer="project-description"]'
97+
);
98+
expect(control).to.be.instanceOf(customElements.get('foxy-internal-text-control'));
7399
});
74100

75101
it('renders a foxy-internal-text-control for company name', async () => {
76102
const element = await fixture<Form>(html`<foxy-client-form></foxy-client-form>`);
77-
const control = element.renderRoot.querySelector('[infer="company-name"]');
103+
const control = element.renderRoot.querySelector('[infer="company"] [infer="company-name"]');
78104
expect(control).to.be.instanceOf(customElements.get('foxy-internal-text-control'));
79105
});
80106

81107
it('renders a foxy-internal-text-control for company url', async () => {
82108
const element = await fixture<Form>(html`<foxy-client-form></foxy-client-form>`);
83-
const control = element.renderRoot.querySelector('[infer="company-url"]');
109+
const control = element.renderRoot.querySelector('[infer="company"] [infer="company-url"]');
84110
expect(control).to.be.instanceOf(customElements.get('foxy-internal-text-control'));
85111
});
86112

87113
it('renders a foxy-internal-text-control for company logo', async () => {
88114
const element = await fixture<Form>(html`<foxy-client-form></foxy-client-form>`);
89-
const control = element.renderRoot.querySelector('[infer="company-logo"]');
115+
const control = element.renderRoot.querySelector('[infer="company"] [infer="company-logo"]');
90116
expect(control).to.be.instanceOf(customElements.get('foxy-internal-text-control'));
91117
});
92118

93119
it('renders a foxy-internal-text-control for contact name', async () => {
94120
const element = await fixture<Form>(html`<foxy-client-form></foxy-client-form>`);
95-
const control = element.renderRoot.querySelector('[infer="contact-name"]');
121+
const control = element.renderRoot.querySelector('[infer="contact"] [infer="contact-name"]');
96122
expect(control).to.be.instanceOf(customElements.get('foxy-internal-text-control'));
97123
});
98124

99125
it('renders a foxy-internal-text-control for contact email', async () => {
100126
const element = await fixture<Form>(html`<foxy-client-form></foxy-client-form>`);
101-
const control = element.renderRoot.querySelector('[infer="contact-email"]');
127+
const control = element.renderRoot.querySelector('[infer="contact"] [infer="contact-email"]');
102128
expect(control).to.be.instanceOf(customElements.get('foxy-internal-text-control'));
103129
});
104130

105131
it('renders a foxy-internal-text-control for contact phone', async () => {
106132
const element = await fixture<Form>(html`<foxy-client-form></foxy-client-form>`);
107-
const control = element.renderRoot.querySelector('[infer="contact-phone"]');
133+
const control = element.renderRoot.querySelector('[infer="contact"] [infer="contact-phone"]');
108134
expect(control).to.be.instanceOf(customElements.get('foxy-internal-text-control'));
109135
});
110136

111137
it('always marks client secret control as readonly', async () => {
112138
const element = await fixture<Form>(html`<foxy-client-form></foxy-client-form>`);
113-
expect(element.readonlySelector.matches('client-secret', true)).to.be.true;
139+
expect(element.readonlySelector.matches('general:client-secret', true)).to.be.true;
114140
});
115141

116142
it('marks client id control as readonly when loaded', async () => {
117143
const element = await fixture<Form>(html`<foxy-client-form></foxy-client-form>`);
118-
expect(element.readonlySelector.matches('client-id', true)).to.be.false;
144+
expect(element.readonlySelector.matches('general:client-id', true)).to.be.false;
119145
element.data = await getTestData('./hapi/clients/0');
120-
expect(element.readonlySelector.matches('client-id', true)).to.be.true;
146+
expect(element.readonlySelector.matches('general:client-id', true)).to.be.true;
121147
});
122148

123149
it('marks client id control as readonly when loading', async () => {
@@ -126,15 +152,15 @@ describe('ClientForm', () => {
126152
<foxy-client-form @fetch=${(evt: FetchEvent) => router.handleEvent(evt)}></foxy-client-form>
127153
`);
128154

129-
expect(element.readonlySelector.matches('client-id', true)).to.be.false;
155+
expect(element.readonlySelector.matches('general:client-id', true)).to.be.false;
130156
element.href = 'https://demo.api/virtual/stall';
131157
await element.requestUpdate();
132-
expect(element.readonlySelector.matches('client-id', true)).to.be.true;
158+
expect(element.readonlySelector.matches('general:client-id', true)).to.be.true;
133159
});
134160

135161
it('hides client secret control when empty', async () => {
136162
const element = await fixture<Form>(html`<foxy-client-form></foxy-client-form>`);
137-
expect(element.hiddenSelector.matches('client-secret', true)).to.be.true;
163+
expect(element.hiddenSelector.matches('general:client-secret', true)).to.be.true;
138164
});
139165

140166
it('uses custom options for header subtitle', async () => {

0 commit comments

Comments
 (0)