add recipe list modal editor
This commit is contained in:
parent
372e43a9a0
commit
5b9b1de94b
2 changed files with 182 additions and 40 deletions
|
|
@ -117,46 +117,31 @@
|
||||||
<input type="text" class="input w-16" formControlName="stirTime" />
|
<input type="text" class="input w-16" formControlName="stirTime" />
|
||||||
<p> sec </p>
|
<p> sec </p>
|
||||||
</div>
|
</div>
|
||||||
|
<button class="btn" (click)="openRecipeListEditor(i)">
|
||||||
|
<div class="flex items-center space-x-2">
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="16"
|
||||||
|
height="16"
|
||||||
|
fill="currentColor"
|
||||||
|
class="bi bi-gear"
|
||||||
|
viewBox="0 0 16 16"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
d="M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492zM5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0z"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
d="M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52l-.094-.319zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115l.094-.319z"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
<p>Details</p>
|
||||||
|
</div>
|
||||||
|
</button>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<!-- show material selector modal -->
|
|
||||||
|
|
||||||
<input
|
|
||||||
type="checkbox"
|
|
||||||
id="material_selector"
|
|
||||||
class="modal-toggle"
|
|
||||||
#checkBox="ngModel"
|
|
||||||
[(ngModel)]="showMaterialSelector"
|
|
||||||
/>
|
|
||||||
<label for="material_selector" class="modal">
|
|
||||||
<div class="modal-box max-h-[400px] overflow-scroll">
|
|
||||||
<div class="flex flex-row m-2 modal">
|
|
||||||
<p class="font-bold text-lg m-2">Materials</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div *ngFor="let cat of getCategoriesList()">
|
|
||||||
<details class="dropdown">
|
|
||||||
<summary class="m-1 btn">{{ cat }}</summary>
|
|
||||||
<ul class="mx-4 menu p-2 shadow bg-base-100 rounded-box w-auto">
|
|
||||||
<li
|
|
||||||
class="my-1 mx-4"
|
|
||||||
*ngFor="let material of categoriedMaterial[cat]"
|
|
||||||
>
|
|
||||||
<a
|
|
||||||
class="btn"
|
|
||||||
(click)="selectMaterial(currentSelectRecipeList!, material.id)"
|
|
||||||
>{{ material.name }} ({{ material.id }})</a
|
|
||||||
>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</details>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</label>
|
|
||||||
|
|
||||||
<!-- show string param modal -->
|
<!-- show string param modal -->
|
||||||
|
|
||||||
<input
|
<input
|
||||||
|
|
@ -195,14 +180,15 @@
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
formControlName="pvalue"
|
formControlName="pvalue"
|
||||||
*ngIf="param.value.pvalue == true || param.value.pvalue == false"
|
*ngIf="param.value.pvalue == true || param.value.pvalue == false"
|
||||||
(click)="setStringParam(isdx, param.value.pkey, !param.value.pvalue)"
|
(click)="
|
||||||
|
setStringParam(isdx, param.value.pkey, !param.value.pvalue)
|
||||||
|
"
|
||||||
/>
|
/>
|
||||||
<input
|
<input
|
||||||
type="text"
|
type="text"
|
||||||
class="input bg-slate-400"
|
class="input bg-slate-400"
|
||||||
formControlName="pvalue"
|
formControlName="pvalue"
|
||||||
*ngIf="param.value.pvalue != true && param.value.pvalue != false
|
*ngIf="param.value.pvalue != true && param.value.pvalue != false"
|
||||||
"
|
|
||||||
(change)="setStringParam(isdx, param.value.pkey, $event)"
|
(change)="setStringParam(isdx, param.value.pkey, $event)"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -211,3 +197,145 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
|
<!-- show detailed recipe list editor -->
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
id="recipe_list_editor"
|
||||||
|
class="modal-toggle"
|
||||||
|
#checkBox="ngModel"
|
||||||
|
[(ngModel)]="showDetailRecipeList"
|
||||||
|
/>
|
||||||
|
<label for="recipe_list_editor" class="modal">
|
||||||
|
<div
|
||||||
|
class="modal-box max-h-[400px] overflow-scroll"
|
||||||
|
[formGroup]="recipeListForm"
|
||||||
|
>
|
||||||
|
<div class="flex flex-row m-2 modal">
|
||||||
|
<p class="font-bold text-lg m-2">Recipe List Editor</p>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
formArrayName="recipeListData"
|
||||||
|
*ngFor="let recipeListAtIdx of recipeListData.controls; let isdx = index"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
*ngIf="isdx == currentSelectRecipeList"
|
||||||
|
formGroupName="{{ isdx }}"
|
||||||
|
class="items-center p-2 space-x-4 space-y-4"
|
||||||
|
>
|
||||||
|
<input type="checkbox" formControlName="isUse" />
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
class="input input-primary"
|
||||||
|
formControlName="materialPathId"
|
||||||
|
(click)="openMaterialList(isdx)"
|
||||||
|
/>
|
||||||
|
<div class="flex items-center">
|
||||||
|
<p class="text-base m-4">Name</p>
|
||||||
|
<input type="text" class="input" formControlName="name" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="flex items-center">
|
||||||
|
<p class="text-base m-4">Stir Time</p>
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
class="input input-bordered"
|
||||||
|
formControlName="stirTime"
|
||||||
|
/>
|
||||||
|
<p> sec</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="flex items-center">
|
||||||
|
<p class="text-base m-4">Mix order</p>
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
class="input input-bordered"
|
||||||
|
formControlName="mixOrder"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<details
|
||||||
|
class="flex items-center space-x-2 bg-orange-300 p-4 rounded-md"
|
||||||
|
>
|
||||||
|
<summary class="cursor-pointer">Powder</summary>
|
||||||
|
|
||||||
|
<div class="flex items-center space-x-2">
|
||||||
|
<p class="text-base m-4">Volume</p>
|
||||||
|
<input type="text" class="input" formControlName="powderGram" />
|
||||||
|
<p> gram</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="flex items-center space-x-2">
|
||||||
|
<p class="text-base m-4">Time</p>
|
||||||
|
<input type="text" class="input" formControlName="powderTime" />
|
||||||
|
</div>
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<details
|
||||||
|
class="flex items-center space-x-2 bg-amber-200 p-4 rounded-md"
|
||||||
|
>
|
||||||
|
<summary class="cursor-pointer">Syrup</summary>
|
||||||
|
|
||||||
|
<div class="flex items-center space-x-2">
|
||||||
|
<p class="text-base m-4">Volume</p>
|
||||||
|
<input type="text" class="input" formControlName="syrupGram" />
|
||||||
|
<p> gram</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="flex items-center space-x-2">
|
||||||
|
<p class="text-base m-4">Time</p>
|
||||||
|
<input type="text" class="input" formControlName="syrupTime" />
|
||||||
|
</div>
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<details class="flex items-center space-x-2 bg-blue-200 p-4 rounded-md">
|
||||||
|
<summary class="cursor-pointer">Water</summary>
|
||||||
|
<div class="flex items-center space-x-2">
|
||||||
|
<p class="text-base m-4">Hot (waterYield)</p>
|
||||||
|
<input type="text" class="input" formControlName="waterYield" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="flex items-center space-x-2">
|
||||||
|
<p class="text-base m-4">Cold (waterCold)</p>
|
||||||
|
<input type="text" class="input" formControlName="waterCold" />
|
||||||
|
</div>
|
||||||
|
</details>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</label>
|
||||||
|
|
||||||
|
<!-- show material selector modal -->
|
||||||
|
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
id="material_selector"
|
||||||
|
class="modal-toggle"
|
||||||
|
#checkBox="ngModel"
|
||||||
|
[(ngModel)]="showMaterialSelector"
|
||||||
|
/>
|
||||||
|
<label for="material_selector" class="modal">
|
||||||
|
<div class="modal-box max-h-[400px] overflow-scroll">
|
||||||
|
<div class="flex flex-row m-2 modal">
|
||||||
|
<p class="font-bold text-lg m-2">Materials</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div *ngFor="let cat of getCategoriesList()">
|
||||||
|
<details class="dropdown">
|
||||||
|
<summary class="m-1 btn">{{ cat }}</summary>
|
||||||
|
<ul class="mx-4 menu p-2 shadow bg-base-100 rounded-box w-auto">
|
||||||
|
<li
|
||||||
|
class="my-1 mx-4"
|
||||||
|
*ngFor="let material of categoriedMaterial[cat]"
|
||||||
|
>
|
||||||
|
<a
|
||||||
|
class="btn"
|
||||||
|
(click)="selectMaterial(currentSelectRecipeList!, material.id)"
|
||||||
|
>{{ material.name }} ({{ material.id }})</a
|
||||||
|
>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</details>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</label>
|
||||||
|
|
|
||||||
|
|
@ -72,6 +72,10 @@ export class RecipeListComponent implements OnInit {
|
||||||
{ updateOn: 'blur' }
|
{ updateOn: 'blur' }
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// detailed recipe list
|
||||||
|
showDetailRecipeList: boolean = false;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private _recipeService: RecipeService,
|
private _recipeService: RecipeService,
|
||||||
private _materialService: MaterialService,
|
private _materialService: MaterialService,
|
||||||
|
|
@ -265,6 +269,10 @@ export class RecipeListComponent implements OnInit {
|
||||||
recipeDetailMat.materialPathId = parseInt(
|
recipeDetailMat.materialPathId = parseInt(
|
||||||
recipeDetailMat.materialPathId!
|
recipeDetailMat.materialPathId!
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// revert stirTime
|
||||||
|
recipeDetailMat.stirTime = recipeDetailMat.stirTime! * 10;
|
||||||
|
|
||||||
emitted_res.push(recipeDetailMat);
|
emitted_res.push(recipeDetailMat);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -446,6 +454,12 @@ export class RecipeListComponent implements OnInit {
|
||||||
return stringParamsDefinition[name] || name;
|
return stringParamsDefinition[name] || name;
|
||||||
};
|
};
|
||||||
|
|
||||||
displayByCond = (index: number, key: string, condition: string) =>
|
displayByCond = (index: number, key: string, condition: string) =>{
|
||||||
conditionTests[condition](this.recipeListData.value[index][key]);
|
return conditionTests[condition](this.recipeListData.value[index][key])};
|
||||||
|
|
||||||
|
|
||||||
|
openRecipeListEditor(i: number) {
|
||||||
|
this.showDetailRecipeList = true;
|
||||||
|
this.currentSelectRecipeList = i;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue