update services page

This commit is contained in:
Jordan Blasenhauer 2024-08-16 17:34:29 +02:00
parent 4003f8f042
commit 36295b2ac1
5 changed files with 197 additions and 184 deletions

View file

@ -1,6 +1,98 @@
from typing import Union
from .utils.widgets import (
button_widget,
button_group_widget,
title_widget,
subtitle_widget,
text_widget,
tabulator_widget,
input_widget,
icons_widget,
regular_widget,
unmatch_widget,
)
from .utils.table import add_column
from .utils.format import get_fields_from_field
from typing import Optional, Union
from .utils.widgets import title_widget, table_widget, button_group_widget, button_widget
columns = [
add_column(title="Name", field="name", formatter="text"),
add_column(title="Method", field="method", formatter="text"),
add_column(title="Draft", field="draft", formatter="icons"),
add_column(title="Actions", field="actions", formatter="buttongroup"),
]
def services_filter(methods: Optional[list] = None) -> list:
filters = [
{
"type": "like",
"fields": ["name"],
"setting": {
"id": "services-keyword",
"name": "services-keyword",
"label": "services_search", # keep it (a18n)
"placeholder": "inp_keyword", # keep it (a18n)
"value": "",
"inpType": "input",
"columns": {"pc": 3, "tablet": 4, "mobile": 12},
"popovers": [
{
"iconName": "info",
"text": "services_search_desc",
}
],
"fieldSize": "sm",
},
},
{
"type": "=",
"fields": ["draft"],
"setting": {
"id": "select-draft",
"name": "select-draft",
"label": "services_select_draft", # keep it (a18n)
"value": "all", # keep "all"
"values": ["all", "online", "draft"],
"inpType": "select",
"onlyDown": True,
"columns": {"pc": 3, "tablet": 4, "mobile": 12},
"popovers": [
{
"iconName": "info",
"text": "services_select_draft_desc",
}
],
"fieldSize": "sm",
},
},
]
if methods is not None and (isinstance(methods, list) and len(methods) >= 2):
filters.append(
{
"type": "=",
"fields": ["method"],
"setting": {
"id": "select-methods",
"name": "select-methods",
"label": "services_select_methods", # keep it (a18n)
"value": "all", # keep "all"
"values": methods,
"inpType": "select",
"onlyDown": True,
"columns": {"pc": 3, "tablet": 4, "mobile": 12},
"popovers": [
{
"iconName": "info",
"text": "services_select_methods_desc",
}
],
"fieldSize": "sm",
},
},
)
return filters
def services_builder(services):
@ -12,7 +104,6 @@ def services_builder(services):
builder = [
{
"type": "tabs",
"columns": {"pc": 4, "tablet": 4, "mobile": 4},
"widgets": [
button_group_widget(
buttons=[
@ -20,11 +111,9 @@ def services_builder(services):
id="services-new",
text="services_new",
color="success",
size="normal",
iconName="plus",
iconColor="white",
modal=services_action(server_name="new", operation="new", title="services_new_title", subtitle="services_new_subtitle"),
containerClass="col-span-12 flex justify-center",
)
]
)
@ -35,88 +124,12 @@ def services_builder(services):
"columns": {"pc": 4, "tablet": 4, "mobile": 4},
"widgets": [
title_widget(title="services_title"),
table_widget(
positions=[4, 4, 4],
header=[
"services_table_name",
"services_table_method",
"services_table_actions",
],
tabulator_widget(
id="services-table",
columns=columns,
layout="fitColumns",
items=services_list,
filters=[
{
"filter": "table",
"filterName": "keyword",
"type": "keyword",
"value": "",
"keys": ["name"],
"field": {
"id": "services-keyword",
"value": "",
"type": "text",
"name": "services-keyword",
"label": "services_search",
"placeholder": "inp_keyword",
"isClipboard": False,
"popovers": [
{
"text": "services_search_desc",
"iconName": "info",
},
],
"columns": {"pc": 3, "tablet": 4, "mobile": 12},
"fieldSize": "sm",
},
},
{
"filter": "table",
"filterName": "method",
"type": "select",
"value": "all",
"keys": ["method"],
"field": {
"id": "services-methods",
"value": "all",
"values": methods,
"name": "services-methods",
"onlyDown": True,
"label": "services_methods",
"popovers": [
{
"text": "services_methods_desc",
"iconName": "info",
},
],
"columns": {"pc": 3, "tablet": 4, "mobile": 12},
"fieldSize": "sm",
},
},
{
"filter": "table",
"filterName": "draft",
"type": "select",
"value": "all",
"keys": ["draft"],
"field": {
"id": "services-draft",
"value": "all",
"values": ["all", "online", "draft"],
"name": "services-draft",
"onlyDown": True,
"label": "services_draft",
"popovers": [
{
"text": "services_draft_desc",
"iconName": "info",
},
],
"columns": {"pc": 3, "tablet": 4, "mobile": 12},
"fieldSize": "sm",
},
},
],
minWidth="md",
title="services_table_title",
filters=services_filter(methods),
),
],
},
@ -128,35 +141,30 @@ def services_builder(services):
def services_settings(settings: dict) -> dict:
# deep copy settings dict
settings = settings.copy()
server_name = settings.get("SERVER_NAME")
# remove "SERVER_NAME" and "IS_DRAFT" key
settings.pop("SERVER_NAME", None)
settings.pop("IS_DRAFT", None)
# Create table with settings remaining keys
settings_columns = [
add_column(title="plugin", field="plugin", formatter="text"),
add_column(title="status", field="status", formatter="icons"),
]
settings_table_items = []
for key, value in settings.items():
format_key = key.replace("USE_", "").replace("_", " ")
settings_table_items.append(
[
{
"type": "Text",
"data": {"text": format_key},
},
{
"type": "Icons",
"data": {
"iconName": "check" if value.get("value") == "yes" else "cross",
},
},
]
{
"plugin": text_widget(text=format_key)["data"],
"status": icons_widget(iconName="check" if value.get("value") == "yes" else "cross", value=value.get("value"))["data"],
},
)
table = table_widget(
positions=[8, 4],
header=["services_settings_table_name", "services_settings_table_status"],
table = tabulator_widget(
id=f"services-settings-{server_name}",
columns=settings_columns,
items=settings_table_items,
filters=[],
minWidth="",
title="services_settings_table_title",
layout="fitColumns",
)
return table
@ -189,6 +197,8 @@ def services_action(
text=f"action_{operation}",
color="delete",
size="normal",
iconColor="white",
iconName="trash",
attrs={
"data-submit-form": f"""{{"SERVER_NAME" : "{server_name}" }}""",
"data-submit-endpoint": f"/{operation}",
@ -203,6 +213,8 @@ def services_action(
id=f"{operation}-service-btn-{server_name}",
text="action_switch",
color="success",
iconColor="white",
iconName="globe" if is_draft else "document",
size="normal",
attrs={
"data-submit-form": f"""{{"SERVER_NAME" : "{server_name}", "OLD_SERVER_NAME" : "{server_name}", "IS_DRAFT" : "{draft_value}" }}""",
@ -265,7 +277,7 @@ def services_action(
button_widget(
id=f"{operation}-service-btn-{server_name}",
text=f"services_mode_{mode}",
color="info",
color="back",
size="normal",
attrs={
"role": "link",
@ -303,84 +315,78 @@ def get_services_list(services):
is_draft = True if service["IS_DRAFT"]["value"] == "yes" else False
is_deletable = False if server_method in ("autoconf", "scheduler") else True
item = []
item = {}
# Get name
item.append({"name": server_name, "type": "Text", "data": {"text": server_name}})
item.append({"method": server_method, "type": "Text", "data": {"text": server_method}})
item.append(
{
"type": "ButtonGroup",
"data": {
"buttons": [
button_widget(
id=f"open-modal-plugins-{index}",
text="plugins",
hideText=True,
color="success",
size="normal",
iconName="eye",
iconColor="white",
modal=services_action(
server_name=server_name,
operation="plugins",
title="services_plugins_title",
subtitle="",
service=service,
),
),
button_widget(
id=f"open-modal-manage-{index}",
text="manage",
hideText=True,
color="edit",
size="normal",
iconName="pen",
iconColor="white",
modal=services_action(
server_name=server_name,
operation="edit",
title="services_edit_title",
subtitle="services_edit_subtitle",
additional=server_name,
),
attrs={"data-server-name": server_name},
),
button_widget(
attrs={"data-server-name": server_name, "data-is-draft": "yes" if is_draft else "no"},
id=f"open-modal-draft-{index}",
text="draft" if is_draft else "online",
hideText=True,
color="blue",
size="normal",
iconName="document" if is_draft else "globe",
iconColor="white",
modal=services_action(
server_name=server_name,
operation="draft",
title="services_draft_title",
subtitle="services_draft_subtitle" if is_draft else "services_online_subtitle",
additional="services_draft_switch_subtitle" if is_draft else "services_online_switch_subtitle",
is_draft=is_draft,
),
),
button_widget(
attrs={"data-server-name": server_name},
id=f"open-modal-delete-{index}",
text="delete",
disabled=not is_deletable,
hideText=True,
color="red",
size="normal",
iconName="trash",
iconColor="white",
modal=services_action(
server_name=server_name, operation="delete", title="services_delete_title", subtitle="services_delete_subtitle"
),
),
]
},
}
)
item["name"] = text_widget(text=server_name)["data"]
item["method"] = text_widget(text=server_method)["data"]
item["draft"] = icons_widget(iconName="check" if is_draft else "cross", value="draft" if is_draft else "online")["data"]
item["actions"] = button_group_widget(
buttons=[
button_widget(
id=f"open-modal-plugins-{index}",
text="plugins",
hideText=True,
color="success",
size="normal",
iconName="eye",
iconColor="white",
modal=services_action(
server_name=server_name,
operation="plugins",
title="services_plugins_title",
subtitle="",
service=service,
),
),
button_widget(
id=f"open-modal-manage-{index}",
text="manage",
hideText=True,
color="edit",
size="normal",
iconName="pen",
iconColor="white",
modal=services_action(
server_name=server_name,
operation="edit",
title="services_edit_title",
subtitle="services_edit_subtitle",
additional=server_name,
),
attrs={"data-server-name": server_name},
),
button_widget(
attrs={"data-server-name": server_name, "data-is-draft": "yes" if is_draft else "no"},
id=f"open-modal-draft-{index}",
text="draft" if is_draft else "online",
hideText=True,
color="blue",
size="normal",
iconName="document" if is_draft else "globe",
iconColor="white",
modal=services_action(
server_name=server_name,
operation="draft",
title="services_draft_title",
subtitle="services_draft_subtitle" if is_draft else "services_online_subtitle",
additional="services_draft_switch_subtitle" if is_draft else "services_online_switch_subtitle",
is_draft=is_draft,
),
),
button_widget(
attrs={"data-server-name": server_name},
id=f"open-modal-delete-{index}",
text="delete",
disabled=not is_deletable,
hideText=True,
color="red",
size="normal",
iconName="trash",
iconColor="white",
modal=services_action(server_name=server_name, operation="delete", title="services_delete_title", subtitle="services_delete_subtitle"),
),
]
)["data"]
data.append(item)

View file

@ -34,4 +34,4 @@ services = [
output = services_builder(services)
save_builder("services", output, script_name="services")
save_builder(page_name="services", output=output, script_name="services")

View file

@ -4,6 +4,7 @@ import Grid from "@components/Widget/Grid.vue";
import GridLayout from "@components/Widget/GridLayout.vue";
import Table from "@components/Widget/Table.vue";
import Title from "@components/Widget/Title.vue";
import Tabulator from "@components/Widget/Tabulator.vue";
import ButtonGroup from "@components/Widget/ButtonGroup.vue";
import Button from "@components/Widget/Button.vue";
import { useEqualStr } from "@utils/global.js";
@ -319,6 +320,10 @@ const props = defineProps({
<Grid>
<!-- widget element -->
<template v-for="(widget, index) in container.widgets" :key="index">
<Tabulator
v-if="useEqualStr(widget.type, 'Tabulator')"
v-bind="widget.data"
/>
<Table v-if="useEqualStr(widget.type, 'Table')" v-bind="widget.data" />
<ButtonGroup
v-if="useEqualStr(widget.type, 'ButtonGroup')"

View file

@ -295,6 +295,8 @@
"bans_select_reason_desc": "Reason is the plugin that triggered the ban.",
"bans_select_remain": "Select remain",
"bans_select_remain_desc": "Scale of remaining time before unban.",
"services_select_methods": "Select methods",
"services_select_draft": "Select draft",
"services_new": "new service",
"services_title": "Services",
"services_table_name": "Name",

File diff suppressed because one or more lines are too long