You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
3.1 KiB
111 lines
3.1 KiB
<script>
|
|
import pluralize from "pluralize";
|
|
import capitalize from "capitalize";
|
|
|
|
import ModalFrame from "../components/ModalFrame";
|
|
import SubGoalInput from "../components/SubGoalInput";
|
|
|
|
import modal from "../stores/modal";
|
|
import stufflog from "../stores/stufflog";
|
|
|
|
import dateStr from "../utils/dateStr";
|
|
|
|
export let period = {};
|
|
|
|
let error = null;
|
|
let goal = null;
|
|
let activity = null;
|
|
let subActivity = null;
|
|
let dateInput = dateStr(period.from);
|
|
let goalId = "";
|
|
let subGoalId = "";
|
|
let subActivityId = "";
|
|
let amount = "200";
|
|
let description = "";
|
|
|
|
function addPeriodLog() {
|
|
error = null;
|
|
const addLog = {
|
|
date: new Date(`${dateInput} 12:00:00.000`),
|
|
goalId: goalId,
|
|
subGoalId: subGoalId,
|
|
subActivityId: subActivityId,
|
|
amount: parseInt(amount),
|
|
description: description,
|
|
}
|
|
|
|
stufflog.updatePeriod(period.id, {addLog}).then(() => {
|
|
modal.close();
|
|
}).catch(err => {
|
|
error = err.message || err;
|
|
console.warn(err);
|
|
});
|
|
}
|
|
|
|
$: goal = period.goals.find(g => g.id === goalId) || null;
|
|
$: activity = $stufflog.activities.find(a => a.id === goal.activityId) || null;
|
|
$: subActivity = activity.subActivities.find(sg => sg.id === subActivityId) || null;
|
|
|
|
$: if (period.goals.length > 0 && goalId === "") {
|
|
goalId = period.goals[0].id;
|
|
}
|
|
$: if (activity != null && !activity.subActivities.find(s => s.id === subActivityId)) {
|
|
if (activity.subActivities.length > 0) {
|
|
subActivityId = activity.subActivities[0].id;
|
|
} else {
|
|
subActivityId = "";
|
|
}
|
|
}
|
|
$: if (goal != null && !goal.subGoals.find(s => s.id === subGoalId)) {
|
|
subGoalId = "";
|
|
}
|
|
</script>
|
|
|
|
<ModalFrame title={`Add ${period.name} Log`} error={error} closable on:close={() => modal.close()}>
|
|
<form on:submit|preventDefault={() => addPeriodLog()}>
|
|
<label>Date</label>
|
|
<input type="date" bind:value={dateInput} />
|
|
|
|
<label>Goal</label>
|
|
<select bind:value={goalId}>
|
|
{#each period.goals as goal (goal.id)}
|
|
<option value={goal.id}>{$stufflog.activities.find(a => a.id === goal.activityId).name}</option>
|
|
{/each}
|
|
</select>
|
|
|
|
{#if (activity != null)}
|
|
<label>Sub-Activity</label>
|
|
<select bind:value={subActivityId}>
|
|
{#each activity.subActivities as subActivity (subActivity.id)}
|
|
<option value={subActivity.id}>{subActivity.name}</option>
|
|
{/each}
|
|
</select>
|
|
{/if}
|
|
|
|
{#if (goal != null && goal.subGoals.length > 0)}
|
|
<label>Sub-Goal</label>
|
|
<select bind:value={subGoalId}>
|
|
<option value="">None</option>
|
|
|
|
{#each goal.subGoals as subGoal (subGoal.id)}
|
|
<option value={subGoal.id}>{subGoal.name} ({subGoal.multiplier.toFixed(2)})</option>
|
|
{/each}
|
|
</select>
|
|
{/if}
|
|
|
|
{#if (subActivity != null)}
|
|
<label>{pluralize(capitalize(subActivity.unitName))}</label>
|
|
<input type="number" bind:value={amount} />
|
|
{/if}
|
|
|
|
<label>Description</label>
|
|
<input type="text" bind:value={description} />
|
|
|
|
<hr />
|
|
|
|
<button type="submit">Add Goal</button>
|
|
</form>
|
|
</ModalFrame>
|
|
|
|
<style>
|
|
</style>
|