-
-
Notifications
You must be signed in to change notification settings - Fork 38
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
new: Add
joinShortcodes
and joinShortcodesToEmoji
functions.
- Loading branch information
Showing
10 changed files
with
195 additions
and
26 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
import { SkinTone } from './types'; | ||
|
||
export default function appendSkinToneIndex( | ||
shortcode: string, | ||
emoji: { tone?: SkinTone | SkinTone[] }, | ||
): string { | ||
return `${shortcode}_${Array.isArray(emoji.tone) ? emoji.tone.join('-') : emoji.tone}`; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,30 +1,34 @@ | ||
import { Emoji } from './types'; | ||
import { Emoji, ShortcodesDataset, CompactEmoji } from './types'; | ||
import joinShortcodesToEmoji from './joinShortcodesToEmoji'; | ||
|
||
export default function flattenEmojiData(data: Emoji[]): Emoji[] { | ||
export default function flattenEmojiData<T extends Emoji | CompactEmoji>( | ||
data: T[], | ||
shortcodeDatasets: ShortcodesDataset[] = [], | ||
): T[] { | ||
const emojis: Emoji[] = []; | ||
|
||
data.forEach((emoji) => { | ||
(data as Emoji[]).forEach((emoji) => { | ||
if (emoji.skins) { | ||
const { skins, ...restEmoji } = emoji; | ||
|
||
// Dont include nested skins array | ||
emojis.push(restEmoji); | ||
const { skins, ...baseEmoji } = emoji; | ||
|
||
emojis.push(joinShortcodesToEmoji(baseEmoji, shortcodeDatasets)); | ||
|
||
// Push each skin modification into the root list | ||
skins.forEach((skin) => { | ||
const skinEmoji = { ...skin }; | ||
|
||
// Inherit tags from parent if they exist | ||
if (emoji.tags) { | ||
skinEmoji.tags = [...emoji.tags]; | ||
if (baseEmoji.tags) { | ||
skinEmoji.tags = [...baseEmoji.tags]; | ||
} | ||
|
||
emojis.push(skinEmoji); | ||
emojis.push(joinShortcodesToEmoji(skinEmoji, shortcodeDatasets)); | ||
}); | ||
} else { | ||
emojis.push(emoji); | ||
emojis.push(joinShortcodesToEmoji(emoji, shortcodeDatasets)); | ||
} | ||
}); | ||
|
||
return emojis; | ||
return emojis as T[]; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
import { Emoji, CompactEmoji, ShortcodesDataset } from './types'; | ||
import joinShortcodesToEmoji from './joinShortcodesToEmoji'; | ||
|
||
export default function joinShortcodes<T extends Emoji | CompactEmoji>( | ||
emojis: T[], | ||
shortcodeDatasets: ShortcodesDataset[], | ||
): T[] { | ||
emojis.forEach((emoji) => { | ||
joinShortcodesToEmoji(emoji, shortcodeDatasets); | ||
|
||
if (emoji.skins) { | ||
joinShortcodes(emoji.skins as Emoji[], shortcodeDatasets); | ||
} | ||
}); | ||
|
||
return emojis; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
import { Emoji, CompactEmoji, ShortcodesDataset } from './types'; | ||
|
||
export default function joinShortcodesToEmoji<T extends Emoji | CompactEmoji>( | ||
emoji: T, | ||
shortcodeDatasets: ShortcodesDataset[], | ||
): T { | ||
if (shortcodeDatasets.length === 0) { | ||
return emoji; | ||
} | ||
|
||
const list = new Set(emoji.shortcodes); | ||
|
||
shortcodeDatasets.forEach((dataset) => { | ||
const shortcodes = dataset[emoji.hexcode]; | ||
|
||
if (Array.isArray(shortcodes)) { | ||
shortcodes.forEach((code) => list.add(code)); | ||
} else if (shortcodes) { | ||
list.add(shortcodes); | ||
} | ||
}); | ||
|
||
emoji.shortcodes = Array.from(list); | ||
|
||
return emoji; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
import joinShortcodesToEmoji from '../src/joinShortcodesToEmoji'; | ||
import { Emoji } from '../src/types'; | ||
|
||
describe('joinShortcodesToEmoji()', () => { | ||
const info: Emoji = { | ||
annotation: 'information', | ||
name: 'INFORMATION SOURCE', | ||
hexcode: '2139', | ||
tags: ['i'], | ||
emoji: 'ℹ️', | ||
text: '', | ||
type: 0, | ||
order: 3821, | ||
group: 8, | ||
subgroup: 95, | ||
version: 0.6, | ||
}; | ||
|
||
it('adds all matching hexcodes to shortcodes list', () => { | ||
const emoji = joinShortcodesToEmoji({ ...info }, [ | ||
{ '2139': 'information' }, | ||
{ '2139': 'info' }, | ||
{ '2139': ['info_source', 'info'] }, | ||
]); | ||
|
||
expect(emoji.shortcodes).toEqual(['information', 'info', 'info_source']); | ||
}); | ||
|
||
it('sets empty list if no matching datasets', () => { | ||
const emoji = joinShortcodesToEmoji({ ...info }, [{ '0000': 'shortcode' }]); | ||
|
||
expect(emoji.shortcodes).toEqual([]); | ||
}); | ||
|
||
it('doesnt set property if no datasets', () => { | ||
const emoji = joinShortcodesToEmoji({ ...info }, []); | ||
|
||
expect(emoji.shortcodes).toBeUndefined(); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters