UNPKG

@gmetrixr/rjson

Version:
66 lines (65 loc) 3.52 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const r_1 = require("../../../r"); const elements_1 = require("../../../r/definitions/elements"); const rules_1 = require("../../../r/definitions/rules"); const VariableTypes_1 = require("../../../r/definitions/variables/VariableTypes"); /** * For media upload element, there is a predefined variable which gets populated when a viewer uploads media. * Since there is only one such predefined var, this restricts it to only one upload per view. * * Changed flow: * - delink the predefined variable from the media upload element for older projects and add separate var for each * - create a new variable at run-time for any future media upload elements */ class Migration { execute(projectJson) { const pJson = projectJson; const projectF = r_1.r.record(pJson); const mediaUploadVar = projectF.getRecord(r_1.RT.variable, -4); // -4 is the id for predefined var media_upload_uri if (mediaUploadVar !== undefined) { // change record id from -4 to 3000, set var_category=autogenerated projectF.changeRecordId(r_1.RT.variable, -4, 3000); r_1.r.record(mediaUploadVar).set(r_1.rtp.variable.var_category, VariableTypes_1.VarCategory.autogenerated); // for each media upload element, set its media_upload_var_id as 3000 projectF.getAllDeepChildren(r_1.RT.element).forEach(e => { if (e.props.element_type === elements_1.ElementType.media_upload) { r_1.r.record(e).set(r_1.rtp.element.media_upload_var_id, 3000); } }); // delete all *autogenerated* media upload rules for when "submit" is clicked // these do not show up on the UI const rulesIdsToDelete = projectF.getAllDeepChildrenIdsWithFilter(r_1.RT.rule, (ruleJson) => { if (ruleJson.props.events_and === undefined && ruleJson.props.accent_color === undefined) { const whenEvent = r_1.r.record(ruleJson).getRecords(r_1.RT.when_event)[0]; if (whenEvent.props.event === rules_1.RuleEvent.on_successful_upload && whenEvent.props.co_type === elements_1.ElementType.media_upload) { const thenActions = r_1.r.record(ruleJson).getRecords(r_1.RT.then_action); for (const ta of thenActions) { if (ta.props.co_id && ta.props.co_id === -4) { return true; } } } } return false; }); for (const ruleId of rulesIdsToDelete) { projectF.deleteDeepRecord(r_1.RT.rule, ruleId); } // update when_events and then_actions which might be using this variable projectF.getAllDeepChildren(r_1.RT.then_action).forEach(ta => { if (ta.props.co_id && ta.props.co_id === -4) { r_1.r.record(ta).set(r_1.rtp.then_action.co_id, 3000); } }); projectF.getAllDeepChildren(r_1.RT.when_event).forEach(we => { if (we.props.co_id && we.props.co_id === -4) { r_1.r.record(we).set(r_1.rtp.when_event.co_id, 3000); } }); } projectF.set(r_1.rtp.project.version, 116); } } const migration = new Migration(); exports.default = migration;