Skip to content

Commit 6e03cb5

Browse files
committed
feat: Winter '25 features
1 parent de9c355 commit 6e03cb5

31 files changed

+1358
-82
lines changed
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
<template>
2+
<div class="slds-form">
3+
<lightning-input
4+
name="objectApiName"
5+
value={objectApiName}
6+
onchange={handleChange}
7+
type="text"
8+
label="Object API Name"
9+
required
10+
></lightning-input>
11+
<lightning-input
12+
name="listViewApiName"
13+
value={listViewApiName}
14+
onchange={handleChange}
15+
type="text"
16+
label="List View API Name"
17+
required
18+
></lightning-input>
19+
<lightning-input
20+
name="label"
21+
value={label}
22+
onchange={handleChange}
23+
type="text"
24+
label="Label"
25+
field-level-help="The list's display label."
26+
></lightning-input>
27+
<lightning-combobox
28+
name="visibility"
29+
label="Visibility"
30+
value={visibility}
31+
options={visibilityOptions}
32+
onchange={handleChange}
33+
field-level-help="The list's level of visibility."
34+
></lightning-combobox>
35+
<lightning-textarea
36+
lwc:if={isSharedVisibility}
37+
name="listShares"
38+
value={listShares}
39+
onchange={handleJsonInputChange}
40+
label="List Shares"
41+
field-level-help="Objects that the list is shared with."
42+
></lightning-textarea>
43+
<lightning-input
44+
name="displayColumns"
45+
value={displayColumns}
46+
onchange={handleChange}
47+
type="text"
48+
label="Display Columns"
49+
field-level-help="A comma-delimited list of display columns (field API names) for the list."
50+
></lightning-input>
51+
<lightning-textarea
52+
name="filteredByInfo"
53+
value={filteredByInfo}
54+
onchange={handleJsonInputChange}
55+
label="Filtered By Info"
56+
field-level-help="Filtering information for the list as JSON. See 'List Filter By Info Input' from the documentation."
57+
></lightning-textarea>
58+
<lightning-input
59+
name="filterLogicString"
60+
value={filterLogicString}
61+
onchange={handleChange}
62+
type="text"
63+
label="Filter Logic String"
64+
field-level-help="The filter logic string, such as (1 OR 2) and 3. Indexes start with 1."
65+
></lightning-input>
66+
<lightning-textarea
67+
name="scope"
68+
value={scope}
69+
onchange={handleJsonInputChange}
70+
label="Scope"
71+
field-level-help="Scope information for the list as JSON. See 'List Scope Input' from the documentation."
72+
></lightning-textarea>
73+
</div>
74+
<div class="slds-m-top_small slds-text-align_right">
75+
<lightning-button
76+
variant="brand"
77+
label="Send"
78+
onclick={handleSendRequest}
79+
disabled={isCallApiButtonDisabled}
80+
></lightning-button>
81+
</div>
82+
</template>
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
import { LightningElement } from 'lwc';
2+
import { createListInfo } from 'lightning/uiListsApi';
3+
4+
export default class CreateListInfo extends LightningElement {
5+
objectApiName = 'Account';
6+
listViewApiName;
7+
displayColumns;
8+
filterLogicString;
9+
filteredByInfo;
10+
label;
11+
listShares;
12+
scope;
13+
visibility;
14+
15+
isValidJson = true;
16+
17+
handleChange(event) {
18+
const element = event.target;
19+
if (event.detail) {
20+
// Dropdown
21+
this[element.name] = event.detail.value;
22+
} else {
23+
// Other inputs
24+
this[element.name] = element.value;
25+
}
26+
}
27+
28+
handleJsonInputChange(event) {
29+
const { name, value } = event.target;
30+
this[name] = value;
31+
try {
32+
if (value && value !== '') {
33+
JSON.parse(value);
34+
}
35+
event.target.setCustomValidity('');
36+
this.checkJsonTextAreasValidity();
37+
} catch (error) {
38+
event.target.setCustomValidity('Invalid JSON');
39+
this.isValidJson = false;
40+
}
41+
event.target.reportValidity();
42+
}
43+
44+
async handleSendRequest() {
45+
this.dispatchEvent(new CustomEvent('request', { bubbles: true }));
46+
47+
const input = {
48+
objectApiName: this.objectApiName,
49+
listViewApiName: this.listViewApiName,
50+
displayColumns: this.displayColumns,
51+
filterLogicString: this.filterLogicString,
52+
label: this.label,
53+
visibility: this.visibility
54+
};
55+
if (this.isSharedVisibility && this.listShares) {
56+
input.listShares = JSON.parse(this.listShares);
57+
}
58+
if (this.filteredByInfo) {
59+
input.filteredByInfo = JSON.parse(this.filteredByInfo);
60+
}
61+
if (this.filteredByInfo) {
62+
input.scope = JSON.parse(this.scope);
63+
}
64+
try {
65+
const response = await createListInfo(input);
66+
this.dispatchEvent(
67+
new CustomEvent('response', {
68+
detail: response,
69+
bubbles: true
70+
})
71+
);
72+
} catch (error) {
73+
this.dispatchEvent(
74+
new CustomEvent('response', {
75+
detail: { error },
76+
bubbles: true
77+
})
78+
);
79+
}
80+
}
81+
82+
checkJsonTextAreasValidity() {
83+
let isValidJson = true;
84+
const textAreas = this.template.querySelectorAll('lightning-textarea');
85+
textAreas.forEach((textArea) => {
86+
if (!textArea.checkValidity()) {
87+
isValidJson = false;
88+
}
89+
});
90+
this.isValidJson = isValidJson;
91+
}
92+
93+
get isCallApiButtonDisabled() {
94+
return !(
95+
this.objectApiName &&
96+
this.listViewApiName &&
97+
this.isValidJson
98+
);
99+
}
100+
101+
get isSharedVisibility() {
102+
return this.visibility === 'Shared';
103+
}
104+
105+
get visibilityOptions() {
106+
return [
107+
{ label: 'Private', value: 'Private' },
108+
{ label: 'Public', value: 'Public' },
109+
{ label: 'Shared', value: 'Shared' }
110+
];
111+
}
112+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
3+
<apiVersion>62.0</apiVersion>
4+
<isExposed>false</isExposed>
5+
</LightningComponentBundle>
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<template>
2+
<div class="slds-form">
3+
<lightning-input
4+
name="objectApiName"
5+
value={objectApiName}
6+
onchange={handleChange}
7+
type="text"
8+
label="Object API Name"
9+
required
10+
></lightning-input>
11+
<lightning-input
12+
name="listViewApiName"
13+
value={listViewApiName}
14+
onchange={handleChange}
15+
type="text"
16+
label="List View API Name"
17+
required
18+
></lightning-input>
19+
</div>
20+
<div class="slds-m-top_small slds-text-align_right">
21+
<lightning-button
22+
variant="brand"
23+
label="Send"
24+
onclick={handleSendRequest}
25+
disabled={isCallApiButtonDisabled}
26+
></lightning-button>
27+
</div>
28+
</template>
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import { LightningElement } from 'lwc';
2+
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
3+
import { deleteListInfo } from 'lightning/uiListsApi';
4+
5+
export default class DeleteListInfo extends LightningElement {
6+
objectApiName = 'Account';
7+
listViewApiName;
8+
9+
handleChange(event) {
10+
const element = event.target;
11+
if (event.detail) {
12+
// Dropdown
13+
this[element.name] = event.detail.value;
14+
} else {
15+
// Other inputs
16+
this[element.name] = element.value;
17+
}
18+
}
19+
20+
async handleSendRequest() {
21+
this.dispatchEvent(new CustomEvent('request', { bubbles: true }));
22+
try {
23+
const { objectApiName, listViewApiName } = this;
24+
await deleteListInfo({ objectApiName, listViewApiName });
25+
this.dispatchEvent(
26+
new CustomEvent('response', {
27+
detail: undefined,
28+
bubbles: true
29+
})
30+
);
31+
this.dispatchEvent(
32+
new ShowToastEvent({
33+
title: 'Success',
34+
message: 'List view deleted',
35+
variant: 'success'
36+
})
37+
);
38+
} catch (error) {
39+
this.dispatchEvent(
40+
new CustomEvent('response', {
41+
detail: { error },
42+
bubbles: true
43+
})
44+
);
45+
}
46+
}
47+
48+
get isCallApiButtonDisabled() {
49+
return !(this.objectApiName && this.listViewApiName);
50+
}
51+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
3+
<apiVersion>62.0</apiVersion>
4+
<isExposed>false</isExposed>
5+
</LightningComponentBundle>

src/main/default/lwc/deleteRecord/deleteRecord.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { LightningElement } from 'lwc';
22
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
33
import { deleteRecord } from 'lightning/uiRecordApi';
44

5-
export default class GetRecordUi extends LightningElement {
5+
export default class DeleteRecord extends LightningElement {
66
recordId = '';
77

88
handleRecordIdChange(event) {
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<template>
2+
<div class="slds-form">
3+
<lightning-input
4+
name="objectApiName"
5+
value={objectApiName}
6+
onchange={handleChange}
7+
type="text"
8+
label="Object API Name"
9+
required
10+
></lightning-input>
11+
<lightning-combobox
12+
name="layoutType"
13+
label="Layout Type"
14+
value={layoutType}
15+
options={layoutTypeOptions}
16+
onchange={handleChange}
17+
required
18+
></lightning-combobox>
19+
<lightning-combobox
20+
name="mode"
21+
label="Mode"
22+
value={mode}
23+
options={modeOptions}
24+
onchange={handleChange}
25+
required
26+
></lightning-combobox>
27+
<lightning-input
28+
name="recordTypeId"
29+
value={recordTypeId}
30+
onchange={handleChange}
31+
type="text"
32+
label="Record Type Id"
33+
min-length="15"
34+
></lightning-input>
35+
</div>
36+
<div class="slds-m-top_small slds-text-align_right">
37+
<lightning-button
38+
variant="brand"
39+
label="Send"
40+
onclick={handleSendRequest}
41+
disabled={isCallApiButtonDisabled}
42+
></lightning-button>
43+
</div>
44+
</template>

0 commit comments

Comments
 (0)