Skip to content

Commit

Permalink
feat(metadata-sidebar): optimize saving function
Browse files Browse the repository at this point in the history
  • Loading branch information
karolinaru committed Sep 24, 2024
1 parent 74d78a0 commit 3f8d6c7
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 179 deletions.
53 changes: 1 addition & 52 deletions src/api/Metadata.js
Original file line number Diff line number Diff line change
Expand Up @@ -405,57 +405,6 @@ class Metadata extends File {
};
}

/**
* Utility to concat instance and template into one entity.
*
* @param {Object} instance - metadata instance
* @param {Object} template - metadata template
* @param {boolean} canEdit - can user edit item
* @return {Object} metadata template instance
*/
createTemplateInstanceFromInstance(
instance: MetadataInstanceV2,
template: MetadataTemplateInstance,
canEdit: boolean,
): MetadataTemplateInstance {
const fields: MetadataTemplateInstanceField[] = [];

// templateKey is unique identifier for the template,
// but its value is set to 'properties' if instance was created using Custom Metadata option instead of template
const isInstanceFromTemplate = template.templateKey !== METADATA_TEMPLATE_PROPERTIES;
if (isInstanceFromTemplate) {
// Get Metadata Fields for Instances created from predefined template
const templateFields = template.fields || [];
templateFields.forEach(field => {
fields.push({
...field,
value: instance[field.key],
});
});
} else {
// Get Metadata Fields for Custom Instances
Object.keys(instance).forEach(key => {
if (!key.startsWith('$')) {
fields.push({
key,
type: 'string',
value: instance[key],
});
}
});
}
return {
canEdit: instance.$canEdit && canEdit,
displayName: template.displayName,
hidden: template.hidden,
id: template.id,
fields,
scope: template.scope,
templateKey: template.templateKey,
type: instance.$type,
};
}

/**
* Creates and returns metadata entities.
*
Expand Down Expand Up @@ -890,7 +839,7 @@ class Metadata extends File {
const key = this.getMetadataCacheKey(id);
const cachedMetadata = cache.get(key);

const templateInstance = this.createTemplateInstanceFromInstance(metadata.data, template, canEdit);
const templateInstance = { ...template, type: metadata.data.$type };
cachedMetadata.templateInstances.push(templateInstance);
this.successHandler(templateInstance);
}
Expand Down
129 changes: 2 additions & 127 deletions src/api/__tests__/Metadata.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -259,102 +259,6 @@ describe('api/Metadata', () => {
});
});

describe('createTemplateInstanceFromInstance()', () => {
test('should return Metadata Template Instance', () => {
expect(
metadata.createTemplateInstanceFromInstance(
{
$canEdit: true,
$id: '70700b4a-aec6-4d32-8ba8-61e6246510aa',
$parent: 'file_12756731826',
$scope: 'enterprise_1169370034',
$template: 'testTemplate',
$type: 'testTemplate-1e81f566-5e9d-4793-b094-de16a3477cda',
$typeVersion: 0,
$version: 0,
name: 'Test name',
},
{
displayName: 'Test template',
fields: [
{
displayName: 'Name',
hidden: false,
id: '78bff5ca-2f19-4f14-ac6f-0a17f0037099',
key: 'name',
type: 'string',
value: 'Test name',
},
],
hidden: false,
id: 'metadata_template_45',
scope: 'enterprise_1169370034',
templateKey: 'testTemplate',
type: 'metadata_template',
canEdit: true,
},
true,
),
).toEqual({
canEdit: true,
displayName: 'Test template',
hidden: false,
id: 'metadata_template_45',
scope: 'enterprise_1169370034',
templateKey: 'testTemplate',
type: 'testTemplate-1e81f566-5e9d-4793-b094-de16a3477cda',
fields: [
{
displayName: 'Name',
hidden: false,
id: '78bff5ca-2f19-4f14-ac6f-0a17f0037099',
key: 'name',
type: 'string',
value: 'Test name',
},
],
});
});

test('should return Metadata Template Instance for Custom Metadata', () => {
expect(
metadata.createTemplateInstanceFromInstance(
{
$canEdit: true,
$id: 'd0c3d5c7-1a67-4925-85dc-62cc8828369f',
$parent: 'file_12756731826',
$scope: 'global',
$template: 'properties',
$type: 'properties',
$typeVersion: 13,
$version: 0,
testCustomField: 'This is string',
},
{
canEdit: true,
displayName: undefined,
fields: [{ key: 'testCustomField', value: 'This is string' }],
hidden: false,
id: 'metadata_template_47',
scope: 'global',
templateKey: 'properties',
type: undefined,
},
true,
),
).toEqual({
canEdit: true,
displayName: undefined,
fields: [{ key: 'testCustomField', type: 'string', value: 'This is string' }],
hidden: false,
id: 'metadata_template_47',
scope: 'global',
templateKey: 'properties',
type: 'properties',
});
});
});

describe('getTemplates()', () => {
test('should return templates with enterprise scope', async () => {
const templatesFromServer = [
Expand Down Expand Up @@ -2262,12 +2166,8 @@ describe('api/Metadata', () => {
};

const updatedMetadata = {
instance: {
id: 'instance_id',
data: {
foo: 'baz',
},
},
...template,
type: undefined,
};

cache.set('metadata_id', {
Expand All @@ -2281,7 +2181,6 @@ describe('api/Metadata', () => {
metadata.getCacheKey = jest.fn().mockReturnValueOnce('cache_id');
metadata.getMetadataCacheKey = jest.fn().mockReturnValueOnce('metadata_id');
metadata.merge = jest.fn().mockReturnValueOnce('file');
metadata.createTemplateInstanceFromInstance = jest.fn().mockReturnValueOnce(updatedMetadata);
metadata.successHandler = jest.fn();
metadata.errorHandler = jest.fn();
await metadata.createMetadataRedesign(file, template, success, error);
Expand All @@ -2295,7 +2194,6 @@ describe('api/Metadata', () => {
data: {},
});
expect(metadata.isDestroyed).toHaveBeenCalled();
expect(metadata.createTemplateInstanceFromInstance).toHaveBeenCalledWith('foo', template, true);
expect(metadata.getCache).toHaveBeenCalled();
expect(metadata.getMetadataCacheKey).toHaveBeenCalledWith(file.id);
expect(metadata.successHandler).toHaveBeenCalledWith(updatedMetadata);
Expand Down Expand Up @@ -2325,15 +2223,6 @@ describe('api/Metadata', () => {
},
};

const updatedMetadata = {
instance: {
id: 'instance_id',
data: {
foo: 'baz',
},
},
};

cache.set('metadata_id', {
templateInstances: [priorMetadata],
});
Expand All @@ -2345,7 +2234,6 @@ describe('api/Metadata', () => {
metadata.getCacheKey = jest.fn().mockReturnValueOnce('cache_id');
metadata.getMetadataCacheKey = jest.fn().mockReturnValueOnce('metadata_id');
metadata.merge = jest.fn().mockReturnValueOnce('file');
metadata.createTemplateInstanceFromInstance = jest.fn().mockReturnValueOnce(updatedMetadata);
metadata.successHandler = jest.fn();
metadata.errorHandler = jest.fn();

Expand All @@ -2360,7 +2248,6 @@ describe('api/Metadata', () => {
data: {},
});
expect(metadata.isDestroyed).toHaveBeenCalled();
expect(metadata.createTemplateInstanceFromInstance).not.toHaveBeenCalled();
expect(metadata.getCache).not.toHaveBeenCalled();
expect(metadata.getMetadataCacheKey).not.toHaveBeenCalled();
expect(metadata.successHandler).not.toHaveBeenCalled();
Expand Down Expand Up @@ -2390,16 +2277,6 @@ describe('api/Metadata', () => {
},
};

const updatedMetadata = {
instance: {
id: 'instance_id',
data: {
foo: 'baz',
},
fields: [],
},
};

cache.set('metadata_id', {
templateInstances: [priorMetadata],
});
Expand All @@ -2411,7 +2288,6 @@ describe('api/Metadata', () => {
metadata.getCacheKey = jest.fn().mockReturnValueOnce('cache_id');
metadata.getMetadataCacheKey = jest.fn().mockReturnValueOnce('metadata_id');
metadata.merge = jest.fn().mockReturnValueOnce('file');
metadata.createTemplateInstanceFromInstance = jest.fn().mockReturnValueOnce(updatedMetadata);
metadata.successHandler = jest.fn();
metadata.errorHandler = jest.fn();

Expand All @@ -2426,7 +2302,6 @@ describe('api/Metadata', () => {
data: {},
});
expect(metadata.isDestroyed).not.toHaveBeenCalled();
expect(metadata.createTemplateInstanceFromInstance).not.toHaveBeenCalled();
expect(metadata.getCache).not.toHaveBeenCalled();
expect(metadata.getMetadataCacheKey).not.toHaveBeenCalled();
expect(metadata.successHandler).not.toHaveBeenCalled();
Expand Down

0 comments on commit 3f8d6c7

Please sign in to comment.