feat(dashboard): card list view
This commit is contained in:
@@ -12,20 +12,19 @@
|
||||
// get the state from the navigator so that we know which tab to start on
|
||||
let location = useLocation();
|
||||
let params = $location.search && new URLSearchParams($location.search);
|
||||
let tabPane: string|number;
|
||||
if (params) {
|
||||
tabPane = params.get("tab");
|
||||
}
|
||||
|
||||
if (!tabPane) {
|
||||
tabPane = "system";
|
||||
}
|
||||
|
||||
|
||||
let tabPane: string|number = params && params.get("tab") || "system";
|
||||
let listView: string = params && params.get("view") || "list";
|
||||
|
||||
// change the URL when changing tabs
|
||||
function navigateTo(tab: string|number) {
|
||||
navigate(`./dash?tab=${tab}`);
|
||||
function navigateTo(tab: string|number, view: string) {
|
||||
let url = "./dash";
|
||||
if (tab || view) url += "?";
|
||||
if (tab) url += `tab=${tab}`
|
||||
if (tab && view) url += "&";
|
||||
if (view) url += `view=${view}`
|
||||
|
||||
navigate(url);
|
||||
tabPane = tab;
|
||||
}
|
||||
|
||||
@@ -85,15 +84,15 @@
|
||||
<Row>
|
||||
<Col class="mx-auto" xs={12} lg={11} xl={10}>
|
||||
<h2 class="visually-hidden">Viewing your own system</h2>
|
||||
<TabContent class="mt-3" on:tab={(e) => navigateTo(e.detail)}>
|
||||
<TabContent class="mt-3" on:tab={(e) => navigateTo(e.detail, listView)}>
|
||||
<TabPane tabId="system" tab="System" active={tabPane === "system"}>
|
||||
<SystemMain bind:user={user} isPublic={false} />
|
||||
</TabPane>
|
||||
<TabPane tabId="members" tab="Members" active={tabPane === "members"}>
|
||||
<List bind:groups={groups} bind:members={members} isPublic={false} itemType={"member"}/>
|
||||
<List on:viewChange={(e) => navigateTo("members", e.detail)} bind:groups={groups} bind:members={members} isPublic={false} itemType={"member"} bind:view={listView} isDash={true} />
|
||||
</TabPane>
|
||||
<TabPane tabId="groups" tab="Groups" active={tabPane === "groups"}>
|
||||
<List bind:members={members} bind:groups={groups} isPublic={false} itemType={"group"}/>
|
||||
<List on:viewChange={(e) => navigateTo("members", e.detail)} bind:members={members} bind:groups={groups} isPublic={false} itemType={"group"} bind:view={listView} isDash={true} />
|
||||
</TabPane>
|
||||
</TabContent>
|
||||
</Col>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<script lang="ts">
|
||||
import { Container, Row, Col, Alert, Spinner, Card, CardHeader, CardBody, CardTitle, Tooltip } from "sveltestrap";
|
||||
import Body from '../lib/group/Body.svelte';
|
||||
import { useParams, Link, navigate } from 'svelte-navigator';
|
||||
import { useParams, Link, navigate, useLocation } from 'svelte-navigator';
|
||||
import { onMount } from 'svelte';
|
||||
import api from "../api";
|
||||
import { Member, Group } from "../api/types";
|
||||
@@ -9,7 +9,14 @@
|
||||
import FaUsers from 'svelte-icons/fa/FaUsers.svelte';
|
||||
import FaList from 'svelte-icons/fa/FaList.svelte';
|
||||
import ListPagination from '../lib/ListPagination.svelte';
|
||||
import CardsList from '../lib/list/CardsList.svelte';
|
||||
import ListView from '../lib/list/ListView.svelte';
|
||||
import CardView from '../lib/list/CardView.svelte';
|
||||
|
||||
// get the state from the navigator so that we know which tab to start on
|
||||
let location = useLocation();
|
||||
let urlParams = $location.search && new URLSearchParams($location.search);
|
||||
|
||||
let listView: string = urlParams && urlParams.get("view") || "list";
|
||||
|
||||
let loading = true;
|
||||
let memberLoading = false;
|
||||
@@ -28,7 +35,7 @@
|
||||
let settings = JSON.parse(localStorage.getItem("pk-settings"));
|
||||
|
||||
let currentPage = 1;
|
||||
let itemsPerPage = settings && settings.accessibility && settings.accessibility.expandedcards ? 5 : 10;
|
||||
let itemsPerPage = listView === "card" ? 12 : settings && settings.accessibility && settings.accessibility.expandedcards ? 5 : 10;
|
||||
|
||||
$: indexOfLastItem = currentPage * itemsPerPage;
|
||||
$: indexOfFirstItem = indexOfLastItem - itemsPerPage;
|
||||
@@ -175,8 +182,12 @@
|
||||
</CardHeader>
|
||||
</Card>
|
||||
<ListPagination bind:currentPage bind:pageAmount />
|
||||
<CardsList on:deletion={(e) => deleteMemberFromList(e)} bind:list={slicedMembers} isPublic={isPublic} itemType="member" itemsPerPage={itemsPerPage} currentPage={currentPage} fullLength={members.length} />
|
||||
<ListPagination bind:currentPage bind:pageAmount />
|
||||
{#if listView === "card"}
|
||||
<CardView list={slicedMembers} {isPublic} itemType="member" isDash={false} />
|
||||
{:else}
|
||||
<ListView on:deletion={(e) => deleteMemberFromList(e)} bind:list={slicedMembers} isPublic={isPublic} itemType="member" itemsPerPage={itemsPerPage} currentPage={currentPage} fullLength={members.length} />
|
||||
<ListPagination bind:currentPage bind:pageAmount />
|
||||
{/if}
|
||||
{/if}
|
||||
{/if}
|
||||
</Col>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<script lang="ts">
|
||||
import { Container, Row, Col, Alert, Spinner, Card, CardHeader, CardBody, CardTitle, Tooltip } from "sveltestrap";
|
||||
import Body from '../lib/member/Body.svelte';
|
||||
import CardsList from '../lib/list/CardsList.svelte';
|
||||
import { useParams, Link, navigate } from 'svelte-navigator';
|
||||
import ListView from '../lib/list/ListView.svelte';
|
||||
import { useParams, Link, navigate, useLocation } from 'svelte-navigator';
|
||||
import { onMount } from 'svelte';
|
||||
import api from "../api";
|
||||
import { Member, Group } from "../api/types";
|
||||
@@ -10,6 +10,13 @@
|
||||
import FaAddressCard from 'svelte-icons/fa/FaAddressCard.svelte'
|
||||
import FaList from 'svelte-icons/fa/FaList.svelte'
|
||||
import ListPagination from '../lib/ListPagination.svelte';
|
||||
import CardView from '../lib/list/CardView.svelte';
|
||||
|
||||
// get the state from the navigator so that we know which tab to start on
|
||||
let location = useLocation();
|
||||
let urlParams = $location.search && new URLSearchParams($location.search);
|
||||
|
||||
let listView: string = urlParams && urlParams.get("view") || "list";
|
||||
|
||||
let loading = true;
|
||||
let groupLoading = false;
|
||||
@@ -29,7 +36,7 @@
|
||||
let settings = JSON.parse(localStorage.getItem("pk-settings"));
|
||||
|
||||
let currentPage = 1;
|
||||
let itemsPerPage = settings && settings.accessibility && settings.accessibility.expandedcards ? 5 : 10;
|
||||
let itemsPerPage = listView === "card" ? 12 : settings && settings.accessibility && settings.accessibility.expandedcards ? 5 : 10;
|
||||
|
||||
$: indexOfLastItem = currentPage * itemsPerPage;
|
||||
$: indexOfFirstItem = indexOfLastItem - itemsPerPage;
|
||||
@@ -176,8 +183,12 @@
|
||||
</CardHeader>
|
||||
</Card>
|
||||
<ListPagination bind:currentPage bind:pageAmount />
|
||||
<CardsList on:deletion={(e) => deleteGroupFromList(e)} bind:list={slicedGroups} isPublic={isPublic} itemType="group" itemsPerPage={itemsPerPage} currentPage={currentPage} fullLength={groups.length} />
|
||||
<ListPagination bind:currentPage bind:pageAmount />
|
||||
{#if listView === "card"}
|
||||
<CardView list={slicedGroups} {isPublic} itemType="group" isDash={false} />
|
||||
{:else}
|
||||
<ListView on:deletion={(e) => deleteGroupFromList(e)} bind:list={slicedGroups} isPublic={isPublic} itemType="group" itemsPerPage={itemsPerPage} currentPage={currentPage} fullLength={groups.length} />
|
||||
<ListPagination bind:currentPage bind:pageAmount />
|
||||
{/if}
|
||||
{/if}
|
||||
{/if}
|
||||
</Col>
|
||||
|
||||
@@ -20,17 +20,20 @@
|
||||
|
||||
let location = useLocation();
|
||||
let urlParams = $location.search && new URLSearchParams($location.search);
|
||||
let tabPane: string;
|
||||
if (urlParams) {
|
||||
tabPane = urlParams.get("tab");
|
||||
}
|
||||
|
||||
if (!tabPane) {
|
||||
tabPane = "system";
|
||||
}
|
||||
let tabPane: string|number = urlParams && urlParams.get("tab") || "system";
|
||||
let listView: string = urlParams && urlParams.get("view") || "list";
|
||||
|
||||
function navigateTo(tab: string|number) {
|
||||
navigate(`./${id}?tab=${tab}`)
|
||||
// change the URL when changing tabs
|
||||
function navigateTo(tab: string|number, view: string) {
|
||||
let url = `./${id}`;
|
||||
if (tab || view) url += "?";
|
||||
if (tab) url += `tab=${tab}`
|
||||
if (tab && view) url += "&";
|
||||
if (view) url += `view=${view}`
|
||||
|
||||
navigate(url);
|
||||
tabPane = tab;
|
||||
}
|
||||
|
||||
let err: string;
|
||||
@@ -70,15 +73,15 @@
|
||||
<Alert color="danger">{err}</Alert>
|
||||
{:else}
|
||||
<Alert color="info" aria-hidden>You are currently <b>viewing</b> a system.</Alert>
|
||||
<TabContent class="mt-3" on:tab={(e) => navigateTo(e.detail)}>
|
||||
<TabContent class="mt-3" on:tab={(e) => navigateTo(e.detail, listView)}>
|
||||
<TabPane tabId="system" tab="System" active={tabPane === "system"}>
|
||||
<SystemMain bind:user isPublic={true} />
|
||||
</TabPane>
|
||||
<TabPane tabId="members" tab="Members" active={tabPane === "members"}>
|
||||
<List members={members} groups={groups} isPublic={true} itemType={"member"} />
|
||||
<List on:viewChange={(e) => navigateTo("members", e.detail)} members={members} groups={groups} isPublic={true} itemType={"member"} bind:view={listView} isDash={false}/>
|
||||
</TabPane>
|
||||
<TabPane tabId="groups" tab="Groups" active={tabPane === "groups"}>
|
||||
<List members={members} groups={groups} isPublic={true} itemType={"group"} />
|
||||
<List on:viewChange={(e) => navigateTo("groups", e.detail)} members={members} groups={groups} isPublic={true} itemType={"group"} bind:view={listView} isDash={false} />
|
||||
</TabPane>
|
||||
</TabContent>
|
||||
{/if}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
import { Alert, Col, Container, Row, Card, CardBody, CardHeader, CardTitle, Input, Label, Button, Accordion, AccordionHeader, AccordionItem } from 'sveltestrap';
|
||||
import FaRandom from 'svelte-icons/fa/FaRandom.svelte'
|
||||
|
||||
import CardsList from '../lib/list/CardsList.svelte';
|
||||
import CardsList from '../lib/list/ListView.svelte';
|
||||
import api from '../api';
|
||||
import { Group, Member } from '../api/types';
|
||||
|
||||
|
||||
Reference in New Issue
Block a user