Skip to content

Commit 19ede69

Browse files
Merge pull request #1 from jamessimone/reducing-duplicate-markup
Suggestion: duplicate markup reduction
2 parents 921d981 + 39a8a84 commit 19ede69

File tree

4 files changed

+38
-24
lines changed

4 files changed

+38
-24
lines changed

.forceignore

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
**/jsconfig.json
2+
3+
**/.eslintrc.json

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
.sfdx/
2+
**/jsconfig.json

force-app/main/default/lwc/character_counter_record_edit_component/character_counter_record_edit_component.html

+6-19
Original file line numberDiff line numberDiff line change
@@ -10,28 +10,15 @@
1010
<lightning-record-edit-form object-api-name={objectApiName} record-id={recordId} onsubmit={saveData} onsuccess={handleSaveSuccess}>
1111
<template for:each={fieldDataCopy} for:item="field" for:index="index">
1212
<div key={field.fieldApiName} class={columnClasses}>
13-
<template if:true={field.isString}>
14-
<template if:false={field.noCharsLeft}>
15-
<lightning-input-field class="character-counter" key={field.fieldApiName} field-name={field.fieldApiName} onchange={determineCharactersLeft} ></lightning-input-field>
16-
</template>
17-
<template if:true={field.noCharsLeft}>
18-
<lightning-input-field class="character-counter" key={field.fieldApiName} field-name={field.fieldApiName} onchange={determineCharactersLeft} disabled="true"></lightning-input-field>
19-
</template>
20-
<template if:false={field.belowCharsThreshold}>
21-
<p class="characters-remaining" key={field.fieldApiName}>{field.charactersRemaining} {CHARACTERS_REMAINING} out of {field.stringFieldLength}</p>
22-
</template>
23-
<template if:true={field.belowCharsThreshold}>
24-
<p class="characters-remaining-red" key={field.fieldApiName}>{field.charactersRemaining} {CHARACTERS_REMAINING} out of {field.stringFieldLength}</p>
25-
</template>
26-
</template>
27-
<template if:false={field.isString}>
28-
<lightning-input-field key={field.fieldApiName} field-name={field.fieldApiName}></lightning-input-field>
29-
</template>
13+
<lightning-input-field class={field.inputStyle} key={field.fieldApiName} field-name={field.fieldApiName} onchange={determineCharactersLeft} disabled={field.disabled}></lightning-input-field>
14+
<template if:true={field.isString}>
15+
<p class={field.paragraphStyle} key={field.paragraphKey}>{field.paragraphText}</p>
16+
</template>
3017
</div>
3118
</template>
3219
<div class="slds-align_absolute-center">
33-
<lightning-button class="slds-p-around_x-small" if:true={renderSaveButton} variant="brand" type="submit" name="Save" label="Save"></lightning-button>
34-
<lightning-button class="slds-p-around_x-small" if:true={renderSaveButton} variant="brand-outline" label="Cancel" onclick={disableEditing}></lightning-button>
20+
<lightning-button class="slds-var-p-around_x-small" if:true={renderSaveButton} variant="brand" type="submit" name="Save" label="Save"></lightning-button>
21+
<lightning-button class="slds-var-p-around_x-small" if:true={renderSaveButton} variant="brand-outline" label="Cancel" onclick={disableEditing}></lightning-button>
3522
</div>
3623
</lightning-record-edit-form>
3724
</template>

force-app/main/default/lwc/character_counter_record_edit_component/character_counter_record_edit_component.js

+27-5
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,11 @@ export default class CharacterCounterRecordEditComponent extends NavigationMixin
1818
@api characterWarningThreshold;
1919
@api fieldColumns = 1;
2020
@track fieldDataCopy;
21-
CHARACTERS_REMAINING = 'characters remaining';
2221
columnClasses = '';
2322

2423
connectedCallback() {
25-
//Due to this.fieldData being an api exposed variable, we need to clone it to be able to update it. This is how you clone objects in js.
26-
this.fieldDataCopy = JSON.parse(JSON.stringify(this.fieldData));
24+
// Due to this.fieldData being an api exposed variable, we need to clone it to be able to update it. This is how you clone objects in js.
25+
this.fieldDataCopy = JSON.parse(JSON.stringify(this.fieldData)).map(fieldData => this.addFieldSpecificStyling(fieldData));
2726
this.determinePageLayout();
2827
}
2928

@@ -33,7 +32,7 @@ export default class CharacterCounterRecordEditComponent extends NavigationMixin
3332
*/
3433
determinePageLayout(){
3534
if(this.fieldColumns == 2){
36-
this.columnClasses = 'slds-col slds-size_6-of-12 slds-p-horizontal_medium slds-float-left inline-grid';
35+
this.columnClasses = 'slds-col slds-size_6-of-12 slds-var-p-horizontal_medium slds-float-left inline-grid';
3736
}
3837
}
3938

@@ -48,7 +47,8 @@ export default class CharacterCounterRecordEditComponent extends NavigationMixin
4847
if(field.fieldApiName === fieldName){
4948
field.currentLength = fieldValue.length;
5049
field.charactersRemaining = field.stringFieldLength - field.currentLength;
51-
this.checkFieldConstraints(field)
50+
this.checkFieldConstraints(field);
51+
this.addFieldSpecificStyling(field);
5252
}
5353
}
5454
}
@@ -126,4 +126,26 @@ export default class CharacterCounterRecordEditComponent extends NavigationMixin
126126
}
127127
}));
128128
}
129+
130+
/*
131+
@description: Does bookkeeping on field-related styles/counter text
132+
*/
133+
addFieldSpecificStyling(fieldData) {
134+
let inputStyle = '';
135+
let paragraphStyle = '';
136+
if (fieldData.isString) {
137+
inputStyle = 'character-counter';
138+
paragraphStyle = `characters-remaining${fieldData.belowCharsThreshold ? '-red' : ''}`;
139+
fieldData.paragraphText = `${fieldData.charactersRemaining} characters remaining out of ${fieldData.stringFieldLength}`
140+
if (fieldData.noCharsLeft) {
141+
fieldData.disabled = true;
142+
} else if (fieldData.disabled) {
143+
delete fieldData.disabled;
144+
}
145+
}
146+
fieldData.inputStyle = inputStyle;
147+
fieldData.paragraphStyle = paragraphStyle;
148+
fieldData.paragraphKey = fieldData.fieldApiName + 'paragraph'
149+
return fieldData
150+
}
129151
}

0 commit comments

Comments
 (0)