Skip to content

Commit fb4fec3

Browse files
authored
Refactor card code (#58)
1 parent 1b055a4 commit fb4fec3

File tree

6 files changed

+44
-45
lines changed

6 files changed

+44
-45
lines changed

custom_components/lock_code_manager/www/lock-code-manager-strategy.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/const.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ export const CODE_SENSOR_KEY = 'code';
22
export const CODE_EVENT_KEY = 'pin_used';
33
export const PIN_SYNCED_TO_LOCKS_KEY = 'pin_synced_to_locks';
44
export const CONDITION_KEYS = ['number_of_uses'];
5+
export const DIVIDER_CARD = {
6+
type: 'divider'
7+
};
58
export const KEY_ORDER = [
69
'name',
710
'enabled',

js/dashboard-strategy.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import { ReactiveElement } from 'lit';
22

33
import { DEFAULT_INCLUDE_CODE_SLOT_SENSORS } from './const';
4+
import { generateView } from './generate-view';
45
import { HomeAssistant } from './ha_type_stubs';
5-
import { generateView, slugify } from './helpers';
6+
import { slugify } from './slugify';
67
import { GetConfigEntriesResponse, LockCodeManagerDashboardStrategyConfig } from './types';
78

89
export class LockCodeManagerDashboardStrategy extends ReactiveElement {

js/helpers.ts renamed to js/generate-view.ts

Lines changed: 3 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import {
22
CODE_EVENT_KEY,
33
CODE_SENSOR_KEY,
44
CONDITION_KEYS,
5+
DIVIDER_CARD,
56
FOLD_ENTITY_ROW_SEARCH_STRING,
67
KEY_ORDER,
78
PIN_SYNCED_TO_LOCKS_KEY
@@ -13,12 +14,9 @@ import {
1314
LovelaceResource,
1415
LovelaceViewConfig
1516
} from './ha_type_stubs';
17+
import { slugify } from './slugify';
1618
import { LockCodeManagerConfigEntryData, LockCodeManagerEntityEntry, SlotMapping } from './types';
1719

18-
const DIVIDER_CARD = {
19-
type: 'divider'
20-
};
21-
2220
export async function generateView(
2321
hass: HomeAssistant,
2422
configEntryId: string,
@@ -51,9 +49,7 @@ export async function generateView(
5149
.map((entity) => {
5250
return {
5351
entity: entity.entity_id,
54-
name: (entity.name ? entity.name : entity.original_name)
55-
.replace('PIN synced to locks', 'synced')
56-
.replace('Code slot', 'Slot'),
52+
name: `Slot ${entity.slotNum.toString()} synced`,
5753
type: 'state-label'
5854
};
5955
})
@@ -223,38 +219,3 @@ function maybeGenerateFoldEntityRowCard(
223219
...entityCards
224220
];
225221
}
226-
227-
// https://gist.github.com/hagemann/382adfc57adbd5af078dc93feef01fe1
228-
export function slugify(value: string, delimiter = '-'): string {
229-
const a = 'àáâäæãåāăąçćčđďèéêëēėęěğǵḧîïíīįìıİłḿñńǹňôöòóœøōõőṕŕřßśšşșťțûüùúūǘůűųẃẍÿýžźż·';
230-
const b = `aaaaaaaaaacccddeeeeeeeegghiiiiiiiilmnnnnoooooooooprrsssssttuuuuuuuuuwxyyzzz${delimiter}`;
231-
const p = new RegExp(a.split('').join('|'), 'g');
232-
233-
let slugified;
234-
235-
if (value === '') {
236-
slugified = '';
237-
} else {
238-
slugified = value
239-
.toString()
240-
.toLowerCase()
241-
// Replace special characters
242-
.replace(p, (c) => b.charAt(a.indexOf(c)))
243-
// Remove Commas between numbers
244-
.replace(/(\d),(?=\d)/g, '$1')
245-
// Replace all non-word characters
246-
.replace(/[^a-z0-9]+/g, delimiter)
247-
// Replace multiple delimiters with single delimiter
248-
.replace(new RegExp(`(${delimiter})\\1+`, 'g'), '$1')
249-
// Trim delimiter from start of text
250-
.replace(new RegExp(`^${delimiter}+`), '')
251-
// Trim delimiter from end of text
252-
.replace(new RegExp(`${delimiter}+$`), '');
253-
254-
if (slugified === '') {
255-
slugified = 'unknown';
256-
}
257-
}
258-
259-
return slugified;
260-
}

js/slugify.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// https://gist.github.com/hagemann/382adfc57adbd5af078dc93feef01fe1
2+
export function slugify(value: string, delimiter = '-'): string {
3+
const a = 'àáâäæãåāăąçćčđďèéêëēėęěğǵḧîïíīįìıİłḿñńǹňôöòóœøōõőṕŕřßśšşșťțûüùúūǘůűųẃẍÿýžźż·';
4+
const b = `aaaaaaaaaacccddeeeeeeeegghiiiiiiiilmnnnnoooooooooprrsssssttuuuuuuuuuwxyyzzz${delimiter}`;
5+
const p = new RegExp(a.split('').join('|'), 'g');
6+
7+
let slugified;
8+
9+
if (value === '') {
10+
slugified = '';
11+
} else {
12+
slugified = value
13+
.toString()
14+
.toLowerCase()
15+
// Replace special characters
16+
.replace(p, (c) => b.charAt(a.indexOf(c)))
17+
// Remove Commas between numbers
18+
.replace(/(\d),(?=\d)/g, '$1')
19+
// Replace all non-word characters
20+
.replace(/[^a-z0-9]+/g, delimiter)
21+
// Replace multiple delimiters with single delimiter
22+
.replace(new RegExp(`(${delimiter})\\1+`, 'g'), '$1')
23+
// Trim delimiter from start of text
24+
.replace(new RegExp(`^${delimiter}+`), '')
25+
// Trim delimiter from end of text
26+
.replace(new RegExp(`${delimiter}+$`), '');
27+
28+
if (slugified === '') {
29+
slugified = 'unknown';
30+
}
31+
}
32+
33+
return slugified;
34+
}

js/view-strategy.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { ReactiveElement } from 'lit';
22

33
import { DEFAULT_INCLUDE_CODE_SLOT_SENSORS } from './const';
4+
import { generateView } from './generate-view';
45
import { HomeAssistant } from './ha_type_stubs';
5-
import { generateView } from './helpers';
66
import { LockCodeManagerEntitiesResponse, LockCodeManagerViewStrategyConfig } from './types';
77

88
export class LockCodeManagerViewStrategy extends ReactiveElement {

0 commit comments

Comments
 (0)