Fixed a number of bugs; added a few fields.

This commit is contained in:
2022-08-08 22:15:55 -07:00
parent 4560d7203d
commit c96b4a6901
10 changed files with 3791 additions and 160 deletions

View File

@@ -9,6 +9,7 @@
import TextField from '@smui/textfield';
import u from 'umbrellajs';
import {AssetTypes} from "/imports/api/asset-types";
import Paper from '@smui/paper';
onMount(async () => {
Meteor.subscribe('assetTypes');
@@ -17,7 +18,7 @@
let assetTypes;
//$m: assetTypes = AssetTypes.find({}).fetch();
//$: assetTypes = useTracker(() => AssetTypes.find({}).fetch());
$: assetTypes = AssetTypes.find({});
$: assetTypes = AssetTypes.find({}, {sort: {year: -1}});
let selectedAssetTypes = [];
let selectedType = null;
@@ -116,17 +117,19 @@
</Actions>
</Dialog>
<h3 style="display: inline-block">Asset Types</h3>
<h3 style="display: block">Asset Types</h3>
<Button class="addBtn" on:click={openAssetTypesDialog}>
<Label>Add...</Label>
</Button>
<List class="assetTypeList" singleSelection dense>
{#each selectedAssetTypes as type}
<Item on:SMUI:action={() => (selectedAssetType = type)} selected={selectedAssetType === type}>
<Text>{type.name}</Text>
</Item>
{/each}
</List>
<Paper>
<List class="assetTypeList" singleSelection dense>
{#each selectedAssetTypes as type}
<Item on:SMUI:action={() => (selectedAssetType = type)} selected={selectedAssetType === type}>
<Text>{type.name}</Text>
</Item>
{/each}
</List>
</Paper>
<div style="grid-column: 1/span 1">
<TextField id="assetIdField" type="text" style="width: 100%" bind:value={assetId} label="AssetId">
</TextField>
@@ -147,7 +150,7 @@
}
:global(.addBtn) {
margin-left: 4rem;
/*margin-left: 4rem;*/
}
:global(.assetTypeList) {

View File

@@ -1,7 +1,7 @@
<script>
import {Meteor} from "meteor/meteor";
import {onMount} from "svelte";
import {writable} from "svelte/store";
import {writable, derived} from "svelte/store";
import TextField from '@smui/textfield';
import HelperText from '@smui/textfield/helper-text';
import Select, { Option } from '@smui/select';
@@ -16,8 +16,13 @@
Meteor.subscribe('assets');
});
let assetTypes;
$: assetTypes = AssetTypes.find({});
$: assetTypes = AssetTypes.find({}, {sort: {year: -1}});
$: assetTypeNameMap = derived(assetTypes, $assetTypes => $assetTypes.reduce((map, obj) => {
map[obj._id] = obj.name;
return map;
}, {}));
// Asset Table //
const assetColumns = [
@@ -35,6 +40,17 @@
minWidth: 100,
weight: 1,
cls: "serial",
}, {
key: "asset",
title: "Asset Type",
value: v => {
$: {
return v.assetTypeId ? $assetTypeNameMap[v.assetTypeId] : "-"
}
},
minWidth: 100,
weight: 1,
cls: "serial",
},
];
const assetActions = {

View File

@@ -58,6 +58,7 @@
const createAssignment = () => {
if(assetId && assetId.length && selectedAssignee) {
Meteor.call("AssetAssignments.add", assetId, selectedCategory === 'Student' ? "Student" : "Staff", selectedAssignee._id)
// TODO: Set focus to the asset ID field.
assetId = "";
}
}
@@ -105,7 +106,7 @@
<TextField bind:this={assetIdWidget} style="flex-grow: 999;" type="text" bind:value={assetId} label="Asset ID">
</TextField>
<Button variant="raised" color="secondary" on:click={createAssignment()} disabled={!assetId || assetId.length === 0 || !selectedAssignee}>
<Button variant="raised" color="secondary" on:click={createAssignment} disabled={!assetId || assetId.length === 0 || !selectedAssignee}>
<Label style="color: white">Create</Label>
</Button>
</div>

View File

@@ -2,14 +2,9 @@
import {Meteor} from "meteor/meteor";
import {onMount} from "svelte";
import {Sites} from "../../api/sites";
import GridTable from "./../GridTable.svelte";
import {writable} from "svelte/store";
import TextField from '@smui/textfield';
import HelperText from '@smui/textfield/helper-text';
import {Students} from "../../api/students";
import Select, { Option } from '@smui/select';
import Dialog, { Title, Content, Actions } from '@smui/dialog';
import Button, { Label } from '@smui/button';
import {Staff} from "/imports/api/staff";
import List, {Item, Graphic, Meta, Text, PrimaryText, SecondaryText} from '@smui/list';
import Paper from '@smui/paper';
@@ -30,12 +25,14 @@
let selectedSiteId;
let categories = ['Email', 'First Name', 'Last Name'];
let selectedCategory = 'Email';
let selectedGrade = 'All';
let selectedGrade = 'All Grades';
let searchText = "";
let searchResults = [];
let searchResults;
let selectedResult;
$: {
console.log("Site ID")
console.log(selectedSiteId)
if(selectedSiteId) {
Meteor.subscribe('students', selectedSiteId);
Meteor.subscribe('staff', selectedSiteId);
@@ -44,34 +41,37 @@
$: {
selectedResult = null;
console.log("Starting search")
// Require at least two characters in the search field before we start filtering.
if(selectedSiteId && selectedGrade && selectedCategory && searchText && searchText.length > 1) {
if(selectedSiteId && selectedGrade && selectedCategory) {
let query = {};
if(selectedCategory === 'Email') {
query.email = {$regex: searchText, $options: 'i'};
}
else if(selectedCategory === 'First Name') {
query.firstName = {$regex: searchText, $options: 'i'};
}
else {
query.lastName = {$regex: searchText, $options: 'i'};
if(searchText && searchText.length > 0) {
if (selectedCategory === 'Email') {
query.email = {$regex: searchText, $options: 'i'};
} else if (selectedCategory === 'First Name') {
query.firstName = {$regex: searchText, $options: 'i'};
} else {
query.lastName = {$regex: searchText, $options: 'i'};
}
}
if(selectedCategory === "Staff") {
searchResults = Staff.find(query);
}
else {
if(selectedGrade !== 'All') {
if(selectedGrade !== 'All Grades') {
query.grade = selectedGrade;
}
searchResults = Students.find(query).fetch();
console.log("Searching")
console.log(query)
searchResults = Students.find(query);
}
}
else {
searchResults = [];
searchResults = undefined;
}
}
</script>
@@ -117,7 +117,8 @@
<!-- </Button>-->
</div>
<List twoLine singleSelection>
{#each searchResults as result}
{#if searchResults}
{#each $searchResults as result}
<Item selected={selectedResult === result}>
<Text>
<PrimaryText>{result.firstName} {result.lastName}</PrimaryText>
@@ -125,6 +126,7 @@
</Text>
</Item>
{/each}
{/if}
</List>
</div>