Skip to content

Commit

Permalink
Lepiter card: update daily notes on database and page edits [feenkcom…
Browse files Browse the repository at this point in the history
  • Loading branch information
JurajKubelka committed Jun 26, 2024
1 parent 3571f0e commit 01c7d0c
Show file tree
Hide file tree
Showing 2 changed files with 143 additions and 2 deletions.
9 changes: 7 additions & 2 deletions src/GToolkit-World/GtHomeLepiterBaseCard.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,12 @@ GtHomeLepiterBaseCard >> createContainer [

{ #category : #'private - widgets' }
GtHomeLepiterBaseCard >> createDailyNotesElement [
^ BrGroupedList new
self flag: LeDatabaseSidebarTreeElement.

^ GtHomeLepiterDailyNotesElement new
databaseViewModel: self database asContentUIModel.

"^ BrGroupedList new
margin: (BlInsets all: 3);
headerElementStencil: [ BrLabel new
beSmallSize;
Expand All @@ -67,7 +72,7 @@ GtHomeLepiterBaseCard >> createDailyNotesElement [
selectedObject := e currentTarget viewModel entityAt: theIndices first.
self spawnPage: selectedObject itemObject from: e currentTarget ] ];
stream: self dailyNotesGroup;
matchParent
matchParent"
]

{ #category : #'private - widgets' }
Expand Down
136 changes: 136 additions & 0 deletions src/GToolkit-World/GtHomeLepiterDailyNotesElement.class.st
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
Class {
#name : #GtHomeLepiterDailyNotesElement,
#superclass : #LeDatabaseElement,
#instVars : [
'groupedListElement',
'updater'
],
#category : #'GToolkit-World-Sections'
}

{ #category : #'private - updating' }
GtHomeLepiterDailyNotesElement >> createDailyNoteGroupFor: aDailyNote [
^ BrGroup new
stream: aDailyNote children asAsyncStream;
domainObject: aDailyNote date;
itemStencil: [ :aNodeType |
LePageTitleAndSummaryElement new
hMatchParent;
vFitContent;
addAptitude: GtHomeLepiterCardListItemAptitude;
margin: (BlInsets left: 3) ];
itemDataBinder: [ :anItemElement :aPage | anItemElement contentViewModel: aPage asContentUIModel ]
]

{ #category : #accessing }
GtHomeLepiterDailyNotesElement >> dailyNotes [
<return: #Collection of: #LeDailyNote>
^ self database dailyNotesGroup
]

{ #category : #'private - updating' }
GtHomeLepiterDailyNotesElement >> dailyNotesGroup [
<return: #TAsyncStream of: #BrGroup>
^ self dailyNotes asAsyncStream
collect: [ :aDailyNote | self createDailyNoteGroupFor: aDailyNote ]
]

{ #category : #initialization }
GtHomeLepiterDailyNotesElement >> initialize [
super initialize.
self initializeUpdater.

self initializeGroupedListElement.
self addChild: groupedListElement as: #group.

self matchParent.
self padding: (BlInsets all: 3)
]

{ #category : #initialization }
GtHomeLepiterDailyNotesElement >> initializeGroupedListElement [
groupedListElement := BrGroupedList new
headerElementStencil: [ BrLabel new
beSmallSize;
aptitude: BrGlamorousLabelAptitude new;
hMatchParent;
vFitContent;
margin: (BlInsets top: 3 left: 3) ];
headerDataBinder: [ :aLabelElement :aGroup | aLabelElement text: aGroup domainObject asString ];
when: BrSelectionDoubleClicked
do: [ :anEvent |
anEvent selection
ifNotEmpty: [ :theIndices |
| selectedObject |
selectedObject := anEvent currentTarget viewModel entityAt: theIndices first.
self spawnPage: selectedObject itemObject from: anEvent currentTarget ] ];
matchParent;
groups: #()
]

{ #category : #initialization }
GtHomeLepiterDailyNotesElement >> initializeUpdater [
updater := BrElementUpdater new
element: self selector: #updateElement;
postponedDuration: 3 seconds
]

{ #category : #'api - ui model' }
GtHomeLepiterDailyNotesElement >> onContentUIModelChanged [
super onContentUIModelChanged.

self updateGroupedListElement
]

{ #category : #'event handling' }
GtHomeLepiterDailyNotesElement >> onDailyNotesChanged: anAnnouncement [
updater ifNil: [ ^ self ].
updater requestUpdate
]

{ #category : #'event handling' }
GtHomeLepiterDailyNotesElement >> spawnPage: aPage from: aButton [
"If we are in a pager, spawn the page in the current phlow, else create a new pager."

^ aButton
allParentsDetect: [ :aParent | aParent isKindOf: GtPager ]
ifFound: [ :aParent | aButton phlow spawnTool: aPage asPhlowTool ]
ifNone: [
GtWorldUtility
showSpaceWithTitle: aPage title
inPagerWith: [ aPage asLepiterPagePhlowTool asElementDo: [ :e | e ] ]
asStencil
from: aButton ]
]

{ #category : #'private - subscriptions' }
GtHomeLepiterDailyNotesElement >> subscribeToContent [
"Subclasses can subscribe to what they are interested in.
All subscriptions to the model should be weak.
Announcements may happen in a non-UI process."

super subscribeToContent.
self flag: LeContentChangeSubscriber.
self database weak
when: LeDatabasePageAdded send: #onDailyNotesChanged: to: self;
when: LeDatabasePageRemoved send: #onDailyNotesChanged: to: self;
when: LePageTitleChanged send: #onDailyNotesChanged: to: self;
when: LeContentTreeChanged send: #onDailyNotesChanged: to: self;
when: LeSnippetContentChanged send: #onDailyNotesChanged: to: self.
]

{ #category : #'private - subscriptions' }
GtHomeLepiterDailyNotesElement >> unsubscribeFromContent [
super unsubscribeFromContent.
self database unsubscribe: self
]

{ #category : #'private - updating' }
GtHomeLepiterDailyNotesElement >> updateElement [
self updateGroupedListElement
]

{ #category : #'private - updating' }
GtHomeLepiterDailyNotesElement >> updateGroupedListElement [
groupedListElement stream: self dailyNotesGroup
]

0 comments on commit 01c7d0c

Please sign in to comment.