diff --git a/packages/sketch/src/commands/icons/shared.js b/packages/sketch/src/commands/icons/shared.js index d06b711b5739..7834f8b178db 100644 --- a/packages/sketch/src/commands/icons/shared.js +++ b/packages/sketch/src/commands/icons/shared.js @@ -31,6 +31,32 @@ function getSymbolName({ icon, size }) { return symbolName; } +/** + * Remove deprecated icon symbols from the current Sketch document + * @param {object} params - removeDeprecatedSymbolArtboards parameters + * @param {Array} params.icons - array of all icon object metadata + * @param {Array} params.sizes - array of icon sizes + * @param {Page} params.symbolsPage - the symbols page as identified by Sketch + */ +function removeDeprecatedSymbolArtboards({ icons, sizes, symbolsPage }) { + const deprecatedIcons = icons.reduce((deprecatedIconsMap, currentIcon) => { + if (currentIcon.deprecated) { + sizes.forEach((size) => { + const symbolName = getSymbolName({ icon: currentIcon, size }); + deprecatedIconsMap.set(symbolName, currentIcon); + }); + } + + return deprecatedIconsMap; + }, new Map()); + + symbolsPage.layers.forEach((symbol) => { + if (deprecatedIcons.get(symbol.name)) { + symbol.remove(); + } + }); +} + export function syncIconSymbols({ document, symbols, @@ -48,6 +74,12 @@ export function syncIconSymbols({ ); } + removeDeprecatedSymbolArtboards({ + icons: metadata.icons, + sizes, + symbolsPage, + }); + const artboards = createSVGArtboards( symbolsPage, sharedStyle,