/** * @license * Copyright (c) 2014, 2024, Oracle and/or its affiliates. * Licensed under The Universal Permissive License (UPL), Version 1.0 * as shown at https://oss.oracle.com/licenses/upl/ * @ignore */ import { h, ComponentProps } from "preact"; import "ojs/ojlistview"; import { ojListView } from "ojs/ojlistview"; import { useState, useCallback } from "preact/hooks"; import { RESTDataProvider } from "ojs/ojrestdataprovider"; import ItemActionsContainer from "./ItemActionsContainer"; import CreateNewItemDialog from "./CreateNewItemDialog"; import "ojs/ojformlayout"; import "ojs/ojinputtext"; import { ojDialog } from "ojs/ojdialog"; import { MutableRef } from "preact/hooks"; type Props = { data?: RESTDataProvider; selectedActivity: Item | null; onItemChanged: (item: Item) => void; }; type Item = { id: number; name: string; short_desc?: string; price?: number; quantity?: number; quantity_shipped?: number; quantity_instock?: number; activity_id?: number; image?: string; }; type ActivityItem = { id: number; name: string; items: Array; short_desc: string; image: string; }; const DEFAULT_ACTIVITY_ITEM_STATE: Partial = {}; const listItemRenderer = (item: ojListView.ItemTemplateContext) => { const image = item.data.image.replace("css", "styles"); return (
{item.data.name}
); }; type ListViewProps = ComponentProps<"oj-list-view">; const gridlinesItemVisible: ListViewProps["gridlines"] = { item: "visible" }; const scrollPolicyOpts: ListViewProps["scrollPolicyOptions"] = { fetchSize: 5 }; const ActivityItemContainer = (props: Props) => { const activityItemDataProvider = props.data; const restServerURLItems = "https://apex.oracle.com/pls/apex/oraclejet/lp/activities/" + props.selectedActivity?.id + "/items/"; const [isCreateOpened, setIsCreateOpened] = useState(false); const [isEditOpened, setIsEditOpened] = useState(false); const [itemData, setItemData] = useState(props.selectedActivity!); const openCreateDialog = () => { console.log("CreateNewItemDialog called"); setIsCreateOpened(true); }; const [activityItemValue, setActivityItemValue] = useState( DEFAULT_ACTIVITY_ITEM_STATE ); const selectedActivityItemChanged = useCallback( (event: ojListView.firstSelectedItemChanged) => { let tempItem = event.detail.value.data; props.onItemChanged(tempItem); setActivityItemValue(tempItem); setItemData(tempItem); }, [activityItemValue] ); const handleDialogClose = (ref: MutableRef, type: string) => { type === "create" ? setIsCreateOpened(false) : setIsEditOpened(false); ref.current.close(); }; const createItem = async (data: Partial, createDialogRef: MutableRef) => { //process create command and close dialog on success if (data?.name) { let quantity = Number(data.quantity_instock) + Number(data.quantity_shipped); const row = { name: data.name, short_desc: data.short_desc, price: data.price, quantity_instock: data.quantity_instock, quantity_shipped: data.quantity_shipped, quantity: quantity, activity_id: props.selectedActivity?.id, image: "css/images/product_images/jet_logo_256.png", }; // Create and send request to REST service to add row const request = new Request(restServerURLItems, { headers: new Headers({ "Content-type": "application/json; charset=UTF-8", }), body: JSON.stringify(row), method: "POST", }); const response = await fetch(request); const addedRow = await response.json(); activityItemDataProvider?.refresh(); // Close dialog console.log("Created new item"); createDialogRef.current.close(); } }; return (

Activity Items

); }; export default ActivityItemContainer;