Add residence picker to contractor create/edit screens

Kotlin/KMM:
- Update Contractor model with optional residenceId and specialties array
- Rename averageRating to rating, update address field names
- Add ContractorMinimal model for task references
- Add residence picker and multi-select specialty chips to AddContractorDialog
- Fix ContractorsScreen and ContractorDetailScreen field references

iOS:
- Rewrite ContractorFormSheet with residence and specialty pickers
- Update ContractorDetailView with FlowLayout for specialties
- Add FlowLayout component for wrapping badge layouts
- Fix ContractorCard and CompleteTaskView field references
- Update ContractorFormState with residence/specialty selection

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Trey t
2025-11-29 18:42:18 -06:00
parent c748f792d0
commit b0838d85df
22 changed files with 1472 additions and 1200 deletions

View File

@@ -56,6 +56,7 @@
1C0789412EBC218B00392B46 /* SwiftUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftUI.framework; path = System/Library/Frameworks/SwiftUI.framework; sourceTree = SDKROOT; };
1C0789612EBC2F5400392B46 /* CaseraExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = CaseraExtension.entitlements; sourceTree = "<group>"; };
1C685CD22EC5539000A9669B /* CaseraTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CaseraTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
1C87A0C42EDB8ED40081E450 /* CaseraUITests.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = CaseraUITests.xctestplan; sourceTree = "<group>"; };
1CBF1BED2ECD9768001BF56C /* CaseraUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CaseraUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
4B07E04F794A4C1CAA8CCD5D /* PhotoViewerSheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoViewerSheet.swift; sourceTree = "<group>"; };
96A3DDC05E14B3F83E56282F /* Casera.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Casera.app; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -196,6 +197,7 @@
86BC7E88090398B44B7DB0E4 = {
isa = PBXGroup;
children = (
1C87A0C42EDB8ED40081E450 /* CaseraUITests.xctestplan */,
1C0789612EBC2F5400392B46 /* CaseraExtension.entitlements */,
7A237E53D5D71D9D6A361E29 /* Configuration */,
E822E6B231E7783DE992578C /* iosApp */,