Skip to content

Commit

Permalink
Allow direct note input from create/edit Case
Browse files Browse the repository at this point in the history
  • Loading branch information
hueachilles committed Sep 21, 2023
1 parent 8a9ad40 commit 8447769
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,11 @@ import com.crisiscleanup.core.model.data.Incident
import com.crisiscleanup.core.model.data.LocalWorksite
import com.crisiscleanup.core.model.data.WorkTypeStatus
import com.crisiscleanup.core.model.data.Worksite
import com.crisiscleanup.core.model.data.WorksiteNote
import com.crisiscleanup.feature.caseeditor.model.CaseDataWriter
import com.crisiscleanup.feature.caseeditor.model.FormFieldsInputData
import com.crisiscleanup.feature.caseeditor.model.LocationInputData
import com.crisiscleanup.feature.caseeditor.model.NotesFlagsInputData
import com.crisiscleanup.feature.caseeditor.model.PropertyInputData
import com.crisiscleanup.feature.caseeditor.model.coordinates
import com.crisiscleanup.feature.caseeditor.navigation.CaseEditorArgs
Expand Down Expand Up @@ -657,6 +659,24 @@ class CaseEditorViewModel @Inject constructor(
}
return false
}

(dataWriter as? NotesFlagsInputData)?.let { notesInputData ->
val editingNote = notesInputData.editingNote.trim()
var notes = worksite!!.notes
if (editingNote.isNotBlank() &&
(notes.isEmpty() || notes.first().note.trim() != editingNote)
) {
notes = notes.toMutableList()
.also {
val note = WorksiteNote.create().copy(note = editingNote)
it.add(0, note)
}
worksite = worksite!!.copy(
notes = notes,
)
notesInputData.editingNote = ""
}
}
}

val workTypeLookup = editorState.incident.workTypeLookup
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ class NotesFlagsInputData(

val notesStream = snapshotFlow { notes.toList() }

var editingNote by mutableStateOf("")

private fun isChanged(notes: List<WorksiteNote>, worksite: Worksite): Boolean {
return notes != worksite.notes ||
isHighPriority != worksite.hasHighPriorityFlag ||
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,13 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Dialog
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.crisiscleanup.core.designsystem.LocalAppTranslator
import com.crisiscleanup.core.designsystem.component.CrisisCleanupButton
import com.crisiscleanup.core.designsystem.component.CrisisCleanupTextArea
import com.crisiscleanup.core.designsystem.component.CrisisCleanupTextButton
import com.crisiscleanup.core.designsystem.theme.listItemHeight
import com.crisiscleanup.core.designsystem.theme.listItemHorizontalPadding
Expand All @@ -34,7 +37,6 @@ import com.crisiscleanup.core.model.data.WorksiteNote
import com.crisiscleanup.core.model.data.hasSurvivorNote
import com.crisiscleanup.feature.caseeditor.CaseNotesFlagsDataEditor
import com.crisiscleanup.feature.caseeditor.EditCaseBaseViewModel
import com.crisiscleanup.feature.caseeditor.R

@Composable
internal fun PropertyNotesFlagsView(
Expand All @@ -45,8 +47,6 @@ internal fun PropertyNotesFlagsView(
val translator = LocalAppTranslator.current
val isEditable = LocalCaseEditor.current.isEditable

var isCreatingNote by remember { mutableStateOf(false) }

val inputData = editor.notesFlagsInputData

HighPriorityFlagInput(inputData, isEditable)
Expand Down Expand Up @@ -104,25 +104,30 @@ internal fun PropertyNotesFlagsView(
NoteView(note, modifier)
}

val onAddNote = remember(viewModel) { { isCreatingNote = true } }
CrisisCleanupIconTextButton(
modifier = Modifier
.testTag("propertyAddNoteBtn")
.listItemHeight()
.fillMaxWidth(),
iconResId = R.drawable.ic_note,
label = translator("caseView.add_note"),
onClick = onAddNote,
val saveNote = remember(viewModel) {
{ note: WorksiteNote -> editor.notesFlagsInputData.notes.add(0, note) }
}
CrisisCleanupTextArea(
text = inputData.editingNote,
onTextChange = { inputData.editingNote = it },
modifier = listItemModifier,
label = { Text(translator("caseView.note")) },
enabled = isEditable,
imeAction = ImeAction.Default,
)
CrisisCleanupButton(
onClick = {
val note = WorksiteNote.create().copy(
note = inputData.editingNote,
)
saveNote(note)
inputData.editingNote = ""
// TODO Scroll to newly added note?
},
modifier = listItemModifier,
text = translator("actions.add"),
enabled = isEditable && inputData.editingNote.isNotBlank(),
)

if (isCreatingNote) {
val dismissNoteDialog = { isCreatingNote = false }
val saveNote = remember(viewModel) {
{ note: WorksiteNote -> editor.notesFlagsInputData.notes.add(0, note) }
}
OnCreateNote(saveNote, dismissNoteDialog)
}

if (showAllNotesDialog) {
val dismissDialog = { showAllNotesDialog = false }
Expand Down

0 comments on commit 8447769

Please sign in to comment.