Add support for Bday sharing
This commit is contained in:
@@ -20,11 +20,12 @@
|
||||
*/
|
||||
|
||||
import {
|
||||
delete_share_by_bday,
|
||||
delete_share_by_map,
|
||||
delete_share_by_token,
|
||||
reload_sharing_list,
|
||||
} from "../api/sharing.js";
|
||||
import { Collection } from "../models/collection.js";
|
||||
import { Collection, CollectionType } from "../models/collection.js";
|
||||
import { collectionsCache } from "../utils/collections_cache.js";
|
||||
import { ErrorHandler } from "../utils/error.js";
|
||||
import { displayPermissions } from "../utils/permissions.js";
|
||||
@@ -51,6 +52,9 @@ export class ShareCollectionScene {
|
||||
);
|
||||
/** @type {HTMLElement} */ let share_by_map_btn = html_scene.querySelector(
|
||||
"button[data-name=sharebymap]"
|
||||
);
|
||||
/** @type {HTMLElement} */ let share_by_bday_btn = html_scene.querySelector(
|
||||
"button[data-name=sharebybday]"
|
||||
);
|
||||
/** @type {HTMLElement} */ let share_by_token_div = html_scene.querySelector(
|
||||
"div[data-name=sharebytoken]"
|
||||
@@ -58,6 +62,9 @@ export class ShareCollectionScene {
|
||||
/** @type {HTMLElement} */ let share_by_map_div = html_scene.querySelector(
|
||||
"div[data-name=sharebymap]"
|
||||
);
|
||||
/** @type {HTMLElement} */ let share_by_bday_div = html_scene.querySelector(
|
||||
"div[data-name=sharebybday]"
|
||||
);
|
||||
/** @type {HTMLElement} */ let error_form = html_scene.querySelector("[data-name=error]");
|
||||
|
||||
let errorHandler = new ErrorHandler(error_form);
|
||||
@@ -83,11 +90,16 @@ export class ShareCollectionScene {
|
||||
push_scene(create_edit_share_scene);
|
||||
}
|
||||
|
||||
function onsharebybday() {
|
||||
let create_edit_share_scene = new CreateEditShareScene(user, password, collection, "bday");
|
||||
push_scene(create_edit_share_scene);
|
||||
}
|
||||
|
||||
this.show = function () {
|
||||
this.release();
|
||||
html_scene.classList.remove("hidden");
|
||||
html_scene.querySelectorAll("details").forEach(function (details) {
|
||||
details.open = true;
|
||||
details.open = true;
|
||||
});
|
||||
cancel_btn.onclick = oncancel;
|
||||
|
||||
@@ -121,6 +133,26 @@ export class ShareCollectionScene {
|
||||
} else {
|
||||
if (share_by_map_div) share_by_map_div.classList.add("hidden");
|
||||
}
|
||||
|
||||
if (features.sharing && features.sharing.PermittedCreateCollectionByBday) {
|
||||
let is_addressbook = collection.type === CollectionType.ADDRESSBOOK;
|
||||
if (share_by_bday_btn) {
|
||||
if (is_addressbook) {
|
||||
share_by_bday_btn.classList.remove("hidden");
|
||||
share_by_bday_btn.onclick = onsharebybday;
|
||||
} else {
|
||||
share_by_bday_btn.classList.add("hidden");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (share_by_bday_btn) share_by_bday_btn.classList.add("hidden");
|
||||
}
|
||||
|
||||
if (features.sharing && features.sharing.FeatureEnabledCollectionByBday && collection.type === CollectionType.ADDRESSBOOK) {
|
||||
if (share_by_bday_div) share_by_bday_div.classList.remove("hidden");
|
||||
} else {
|
||||
if (share_by_bday_div) share_by_bday_div.classList.add("hidden");
|
||||
}
|
||||
});
|
||||
|
||||
title.textContent = collection.displayname || collection.href;
|
||||
@@ -143,7 +175,7 @@ export class ShareCollectionScene {
|
||||
*/
|
||||
function update_share_list(user, password, collection, errorHandler) {
|
||||
let share_rows = document.querySelectorAll(
|
||||
"[data-name=sharetokenrowtemplate], [data-name=sharemaprowtemplate]",
|
||||
"[data-name=sharetokenrowtemplate], [data-name=sharemaprowtemplate], [data-name=sharebdayrowtemplate]",
|
||||
);
|
||||
share_rows.forEach(function (row) {
|
||||
if (!row.classList.contains("hidden")) {
|
||||
@@ -170,8 +202,9 @@ function update_share_list(user, password, collection, errorHandler) {
|
||||
* @param {string} delete_label
|
||||
* @param {function(string, string, import('../api/sharing.js').Share, function(?string):void):void} delete_action
|
||||
* @param {ErrorHandler} errorHandler
|
||||
* @param {function():void} [onDeleteSuccess] Optional extra callback after a successful delete.
|
||||
*/
|
||||
function add_share_row_node(user, password, collection, share, template, delete_label, delete_action, errorHandler) {
|
||||
function add_share_row_node(user, password, collection, share, template, delete_label, delete_action, errorHandler, onDeleteSuccess) {
|
||||
let pathortoken = share["PathOrToken"] || "";
|
||||
let node = /** @type {HTMLElement} */ (template.cloneNode(true));
|
||||
node.classList.remove("hidden");
|
||||
@@ -195,6 +228,7 @@ function add_share_row_node(user, password, collection, share, template, delete_
|
||||
let delete_collection_scene = new DeleteConfirmationScene(
|
||||
user, password, "Delete Share", share, delete_label + " " + pathortoken, delete_action, false,
|
||||
function () {
|
||||
if (onDeleteSuccess) onDeleteSuccess();
|
||||
pop_scene();
|
||||
update_share_list(user, password, collection, errorHandler);
|
||||
}
|
||||
@@ -215,6 +249,7 @@ function add_share_row_node(user, password, collection, share, template, delete_
|
||||
function add_share_rows(user, password, collection, shares, errorHandler) {
|
||||
/** @type {HTMLElement} */ let token_template = document.querySelector("[data-name=sharetokenrowtemplate]");
|
||||
/** @type {HTMLElement} */ let map_template = document.querySelector("[data-name=sharemaprowtemplate]");
|
||||
/** @type {HTMLElement} */ let bday_template = document.querySelector("[data-name=sharebdayrowtemplate]");
|
||||
shares.forEach(function (share) {
|
||||
let pathortoken = share["PathOrToken"] || "";
|
||||
let pathmapped = share["PathMapped"] || "";
|
||||
@@ -226,6 +261,9 @@ function add_share_rows(user, password, collection, shares, errorHandler) {
|
||||
add_share_row_node(user, password, collection, share, token_template, "share", delete_share_by_token, errorHandler);
|
||||
} else if (share["ShareType"] === "map") {
|
||||
add_share_row_node(user, password, collection, share, map_template, "map", delete_share_by_map, errorHandler);
|
||||
} else if (share["ShareType"] === "bday") {
|
||||
let onDeleteSuccess = (share["User"] === user) ? function () { collectionsCache.invalidate(); } : undefined;
|
||||
add_share_row_node(user, password, collection, share, bday_template, "bday", delete_share_by_bday, errorHandler, onDeleteSuccess);
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -238,7 +276,8 @@ export function maybe_enable_sharing_options(features) {
|
||||
if (!features || !features.sharing) return;
|
||||
let map_is_enabled = features.sharing.FeatureEnabledCollectionByMap || false;
|
||||
let token_is_enabled = features.sharing.FeatureEnabledCollectionByToken || false;
|
||||
if (map_is_enabled || token_is_enabled) {
|
||||
let bday_is_enabled = features.sharing.FeatureEnabledCollectionByBday || false;
|
||||
if (map_is_enabled || token_is_enabled || bday_is_enabled) {
|
||||
let share_options = document.querySelectorAll("[data-name=shareoption]");
|
||||
for (let i = 0; i < share_options.length; i++) {
|
||||
let share_option = share_options[i];
|
||||
|
||||
Reference in New Issue
Block a user