!include once #1026287 // Multi-Comm Concepts abstract sclass DynMultiComm > DynModule { transient ConceptTable ct; transient bool considerAllActive; start { dbIndexing(Customer, 'cookie, Customer, 'active, Message, 'customer); } visualize { ct = new ConceptTable(Customer); if (!considerAllActive) ct.filter = c -> c.active(); IF1 renderer = defaultConceptRendererForTable(Customer); ct.renderer = c -> { Map map = renderer.get(c); map.remove("lastPing"); transformValueInPlace str(map, "botConversationID"); map.put("Last activity", iround(toSeconds(elapsedMS_timestamp(c.lastPing)))); Message msg = c.lastMessage(); map.put("Last message", msg == null ? "" : msg.text); ret map; }; awtEvery(ct.getTable(), 5.0, r { ct.update() }); ret jhsplit( jCenteredSection("Active Customers", ct.getTable()), jCenteredSection("Messages", makeConceptsTable(Message))); } // API L activeCustomers() { ret cloneList(conceptsWhere Customer(active := true)); } L messagesForCustomer(Customer c) { ret cloneList(conceptsWhere Message(customer := c)); } }