const path = require('path');
|
const pascalCase = require('pascal-case');
|
const { stringifyRequest } = require('loader-utils');
|
const { stringifySymbol, stringify } = require('../../lib/utils');
|
|
module.exports = function runtimeGenerator({ symbol, config, context, loaderContext }) {
|
const { spriteModule, symbolModule, runtimeOptions } = config;
|
const compilerContext = loaderContext._compiler.context;
|
|
const iconModulePath = path.resolve(compilerContext, runtimeOptions.iconModule);
|
const iconModuleRequest = stringify(
|
path.relative(path.dirname(symbol.request.file), iconModulePath)
|
);
|
|
const spriteRequest = stringifyRequest({ context }, spriteModule);
|
const symbolRequest = stringifyRequest({ context }, symbolModule);
|
const parentComponentDisplayName = 'SpriteSymbolComponent';
|
const displayName = `${pascalCase(symbol.id)}${parentComponentDisplayName}`;
|
|
return `
|
import React from 'react';
|
import SpriteSymbol from ${symbolRequest};
|
import sprite from ${spriteRequest};
|
import ${parentComponentDisplayName} from ${iconModuleRequest};
|
|
const symbol = new SpriteSymbol(${stringifySymbol(symbol)});
|
sprite.add(symbol);
|
|
export default class ${displayName} extends React.Component {
|
render() {
|
return <${parentComponentDisplayName} glyph="${symbol.id}" {...this.props} />;
|
}
|
}
|
`;
|
};
|