@stackbit/annotations
Version:
Stackbit annotations utils
89 lines • 2.88 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.pickDataAttrs = exports.toFieldPath = exports.toObjectId = exports.getFieldPath = exports.getObjectId = exports.StackbitFieldPathAttrName = exports.StackbitObjectIdAttrName = void 0;
exports.StackbitObjectIdAttrName = 'data-sb-object-id';
exports.StackbitFieldPathAttrName = 'data-sb-field-path';
function getObjectId(props) {
return props?.[exports.StackbitObjectIdAttrName];
}
exports.getObjectId = getObjectId;
function getFieldPath(props) {
return props?.[exports.StackbitFieldPathAttrName];
}
exports.getFieldPath = getFieldPath;
/**
* Takes a string and returns an object with that string wrapped into the
* `data-sb-object-id` attribute.
*
* @example
* toObjectId('xyz')
* => { 'data-sb-object-id': 'xyz' }
*
* @param objectId
*/
function toObjectId(objectId) {
if (process.env.NODE_ENV === 'production') {
return {};
}
if (!objectId) {
return {};
}
return { [exports.StackbitObjectIdAttrName]: objectId };
}
exports.toObjectId = toObjectId;
/**
* Takes field-path and returns an object with all field-paths concatenated into
* the `data-sb-field-path` attribute. Each field-path can be a string or a
* FieldPathDescriptor.
*
* @example
* toFieldPath('.button', { objectId: 'xyz', fieldPath: 'link', xpath: '@href' })
* => { 'data-sb-field-path': '.button xyz:link#@href' }
*
* toFieldPath({ oid: 'abc', fp: 'image', xpath: 'img[1]/@src' })
* => { 'data-sb-field-path': 'abc:image#img[1]/@src' }
*
* @param fieldPaths
*/
function toFieldPath(...fieldPaths) {
if (process.env.NODE_ENV === 'production') {
return {};
}
const fieldPath = fieldPaths
.map((fieldPath) => {
if (!fieldPath) {
return null;
}
if (typeof fieldPath === 'string') {
return fieldPath;
}
const fp = 'fieldPath' in fieldPath ? fieldPath.fieldPath : fieldPath.fp;
const oid = 'objectId' in fieldPath ? fieldPath.objectId : 'oid' in fieldPath ? fieldPath.oid : '';
const xpath = 'xpath' in fieldPath ? fieldPath.xpath : '';
return (oid ? `${oid}:` : '') + fp + (xpath ? `#${xpath}` : '');
})
.filter(Boolean)
.join(' ')
.trim();
return fieldPath ? { [exports.StackbitFieldPathAttrName]: fieldPath } : {};
}
exports.toFieldPath = toFieldPath;
/**
* Takes an object and returns a new object with only the properties that start
* with `data-`
*
* @param props
*/
function pickDataAttrs(props) {
if (!props) {
return {};
}
return Object.entries(props).reduce((dataAttrs, [key, value]) => {
if (key.startsWith('data-')) {
dataAttrs[key] = value;
}
return dataAttrs;
}, {});
}
exports.pickDataAttrs = pickDataAttrs;
//# sourceMappingURL=index.js.map