Newer
Older
smart-home-server / webclient / src / js / components / screens / scripts / scripts-funcs.js
function sidebarTemplate(active) {
	return Helper.template.sidebarNav([
		{
			content: `<span class="list-label"><i class="ph ph-cpu"></i> Scopes</span>`,
			route: "/#!/scripts/scopes",
			is_active: active == "scopes"
		},
		{
			content: `<span class="list-label"><i class="ph ph-play"></i> Actions</span>`,
			route: "/#!/scripts/actions",
			is_active: active == "actions"
		},
		{
			content: `<span class="list-label"><i class="ph ph-magnifying-glass"></i> Regular</span>`,
			route: "/#!/scripts/regular",
			is_active: active == "regular"
		}
	]);
}

function runActionScript(sh_api, alias, cb) {
	sh_api.scripts.run({
		alias: alias,
		params: {}
	}, (err, data, meta) => {
		if(data) {
			cb(true);

			setTimeout(() => Screens.reinit(), 1000);

			setTimeout(() => Toasts.createSuccess(
				`${alias} running`,
				`<b>${alias}</b> running success`
			).show(), 300);
		} else {
			cb(false);

			setTimeout(() => Toasts.createError(
				`${alias} failed`,
				`<b>${alias}</b> running failed`
			).show(), 300);
		}
	});
}

function createActionCardHtml(action) {
	const cardColor = action.state == "enabled" ? "primary" : "warning";
	return `
		<div 
			class="card device-action card-${cardColor} script-action" 
			data-alias="${action.alias}"
		>
			<span class="card-title">${action.name} 
				<button 
					class="btn-icon without-hover action-details-btn" 
					data-alias='${action.alias}'
				>
					<i class="ph ph-dots-three-vertical"></i>
				</button>
			</span>

			<div class="card-content">
				<div class="device-icon-container">
					<div class="device-icon">
						${action.icon}
					</div>
				</div>

				<div class="device-name mb-2">${action.description}</div>
			</div>
		</div>
	`;
}

function setActionCardEventsHandlers(sh_api, actionCard) {
	actionCard.querySelector(".card-content").addEventListener("click", e => {
		if(actionCard.getAttribute("disabled")) {
			return ;
		}

		Helper.states.cardScriptActionLoadingState(actionCard, true);

		const alias = actionCard.dataset.alias;
		runActionScript(sh_api, alias, resultFlag => {
			Helper.states.cardScriptActionLoadingState(actionCard, false);

			if(resultFlag) {
				actionCard.classList.add("card-success");
				setTimeout(() => actionCard.classList.remove("card-success"), 1000);
			}
		});

	});
}

function createActionCard(sh_api, action) {
	const container = document.createElement("div");
	container.innerHTML = createActionCardHtml(action);
	const card = container.querySelector(".card");
	setActionCardEventsHandlers(sh_api, card);

	return card;
}

export {
	sidebarTemplate,
	runActionScript,
	createActionCardHtml,
	setActionCardEventsHandlers,
	createActionCard,
}