summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/releases/util.js
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts/releases/util.js')
-rw-r--r--app/assets/javascripts/releases/util.js41
1 files changed, 41 insertions, 0 deletions
diff --git a/app/assets/javascripts/releases/util.js b/app/assets/javascripts/releases/util.js
new file mode 100644
index 00000000000..842a423b142
--- /dev/null
+++ b/app/assets/javascripts/releases/util.js
@@ -0,0 +1,41 @@
+import {
+ convertObjectPropsToCamelCase,
+ convertObjectPropsToSnakeCase,
+} from '~/lib/utils/common_utils';
+
+/**
+ * Converts a release object into a JSON object that can sent to the public
+ * API to create or update a release.
+ * @param {Object} release The release object to convert
+ * @param {string} createFrom The ref to create a new tag from, if necessary
+ */
+export const releaseToApiJson = (release, createFrom = null) => {
+ const name = release.name?.trim().length > 0 ? release.name.trim() : null;
+
+ const milestones = release.milestones ? release.milestones.map(milestone => milestone.title) : [];
+
+ return convertObjectPropsToSnakeCase(
+ {
+ name,
+ tagName: release.tagName,
+ ref: createFrom,
+ description: release.description,
+ milestones,
+ assets: release.assets,
+ },
+ { deep: true },
+ );
+};
+
+/**
+ * Converts a JSON release object returned by the Release API
+ * into the structure this Vue application can work with.
+ * @param {Object} json The JSON object received from the release API
+ */
+export const apiJsonToRelease = json => {
+ const release = convertObjectPropsToCamelCase(json, { deep: true });
+
+ release.milestones = release.milestones || [];
+
+ return release;
+};