feat: update to version 2.1.0 with central site collection configuration and inheritance support
This commit is contained in:
@@ -2,6 +2,8 @@
|
||||
'use strict';
|
||||
|
||||
var FIELD_CUSTOMIZER_ID = 'a555f4fc-d6a6-4421-8189-457449d9bbde';
|
||||
var SITE_DEFAULTS_PROPERTY = 'PortalSettings.ExpiryIndicator.Defaults';
|
||||
var WEB_OVERRIDE_PROPERTY = 'PortalSettings.ExpiryIndicator.Override';
|
||||
var state = { context: null, field: null, config: null, loading: null };
|
||||
|
||||
function configuredExpiryField() {
|
||||
@@ -44,6 +46,10 @@
|
||||
return String(pageContext().webAbsoluteUrl || '').replace(/\/$/, '');
|
||||
}
|
||||
|
||||
function siteUrl() {
|
||||
return String(pageContext().siteAbsoluteUrl || webUrl()).replace(/\/$/, '');
|
||||
}
|
||||
|
||||
function listId(context) {
|
||||
return String((context && context.listName) || pageContext().pageListId || '').replace(/[{}]/g, '');
|
||||
}
|
||||
@@ -94,14 +100,55 @@
|
||||
};
|
||||
}
|
||||
|
||||
function mergeConfig(baseValue, overrideValue) {
|
||||
var base = baseValue || defaults();
|
||||
var override = overrideValue || {};
|
||||
var result = {
|
||||
baseField: override.baseField || base.baseField || 'Created',
|
||||
expiryField: override.expiryField || base.expiryField || 'ExpiryDate',
|
||||
default: {
|
||||
lifeTime: override.default && override.default.lifeTime ? override.default.lifeTime :
|
||||
(base.default && base.default.lifeTime ? base.default.lifeTime : { value: 2, unit: 'years' }),
|
||||
columnRule: override.default && override.default.columnRule instanceof Array ? override.default.columnRule :
|
||||
(base.default && base.default.columnRule instanceof Array ? base.default.columnRule : [])
|
||||
},
|
||||
rules: override.rules instanceof Array ? override.rules : (base.rules instanceof Array ? base.rules : []),
|
||||
nullText: typeof override.nullText === 'string' ? override.nullText : base.nullText,
|
||||
confirmExtension: typeof override.confirmExtension === 'boolean' ? override.confirmExtension : base.confirmExtension
|
||||
};
|
||||
return result;
|
||||
}
|
||||
|
||||
function propertyValue(payload, key) {
|
||||
var properties = payload && payload.d ? payload.d : (payload || {});
|
||||
for (var name in properties) {
|
||||
if (Object.prototype.hasOwnProperty.call(properties, name) && name.toLowerCase() === key.toLowerCase()) {
|
||||
try { return typeof properties[name] === 'string' ? JSON.parse(properties[name]) : properties[name]; }
|
||||
catch (ignore) { return null; }
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
function isBindingOnly(value) {
|
||||
if (!value || typeof value !== 'object') { return false; }
|
||||
return typeof value.expiryField === 'string' && !value.default && !value.rules &&
|
||||
!value.baseField && typeof value.nullText === 'undefined' && typeof value.confirmExtension === 'undefined';
|
||||
}
|
||||
|
||||
function loadConfig(context) {
|
||||
var id = listId(context);
|
||||
if (!id) { return Promise.reject(new Error('Keine Liste erkannt.')); }
|
||||
if (state.loading && state.context === id) { return state.loading; }
|
||||
state.context = id;
|
||||
state.loading = request('GET', listUrl(id) +
|
||||
'/fields?$select=Id,InternalName,ClientSideComponentId,ClientSideComponentProperties')
|
||||
.then(function (data) {
|
||||
var fieldRequest = request('GET', listUrl(id) +
|
||||
'/fields?$select=Id,InternalName,ClientSideComponentId,ClientSideComponentProperties');
|
||||
var sitePropertiesRequest = request('GET', siteUrl() + '/_api/web/AllProperties').catch(function () { return {}; });
|
||||
var webPropertiesRequest = siteUrl().toLowerCase() === webUrl().toLowerCase() ? Promise.resolve({}) :
|
||||
request('GET', webUrl() + '/_api/web/AllProperties').catch(function () { return {}; });
|
||||
state.loading = Promise.all([fieldRequest, sitePropertiesRequest, webPropertiesRequest])
|
||||
.then(function (results) {
|
||||
var data = results[0];
|
||||
var fields = data.d ? data.d.results : (data.value || []);
|
||||
var field;
|
||||
for (var index = 0; index < fields.length; index++) {
|
||||
@@ -109,12 +156,18 @@
|
||||
if (componentId === FIELD_CUSTOMIZER_ID) { field = fields[index]; break; }
|
||||
}
|
||||
if (!field) { throw new Error('Kein ExpiryIndicator-Feld gebunden.'); }
|
||||
var config = defaults(field.InternalName);
|
||||
var inherited = mergeConfig(defaults(field.InternalName), propertyValue(results[1], SITE_DEFAULTS_PROPERTY));
|
||||
inherited = mergeConfig(inherited, propertyValue(results[2], WEB_OVERRIDE_PROPERTY));
|
||||
var config = inherited;
|
||||
try {
|
||||
if (field.ClientSideComponentProperties) {
|
||||
var parsed = JSON.parse(field.ClientSideComponentProperties);
|
||||
for (var name in parsed) {
|
||||
if (Object.prototype.hasOwnProperty.call(parsed, name)) { config[name] = parsed[name]; }
|
||||
if (parsed.inheritSiteDefaults === true || parsed.override || isBindingOnly(parsed)) {
|
||||
config = mergeConfig(inherited, parsed.override || {});
|
||||
} else if (parsed.inheritSiteDefaults === false) {
|
||||
config = mergeConfig(defaults(field.InternalName), parsed.override || {});
|
||||
} else {
|
||||
config = mergeConfig(defaults(field.InternalName), parsed);
|
||||
}
|
||||
}
|
||||
} catch (ignore) { }
|
||||
|
||||
Reference in New Issue
Block a user