Skip to content

Instantly share code, notes, and snippets.

View colinfwren's full-sized avatar

Colin Wren colinfwren

View GitHub Profile
@colinfwren
colinfwren / onDeleteChunkedList.swift
Created November 23, 2024 22:56
Handling onDelete in a chunked list
import SwiftUI
import SwiftData
import Algorithms
struct EntryListView: View {
@Query(sort: \Entry.created, order: .reverse) private var entries: [Entry]
let entryDateFormatter = DateFormatter()
let sectionDateFormatter = DateFormatter()
init() {
import SwiftUI
import SwiftData
import Algorithms
struct EntryListView: View {
@Query(sort: \Entry.created, order: .reverse) private var entries: [Entry]
let entryDateFormatter = DateFormatter()
let sectionDateFormatter = DateFormatter()
init() {
import Algorithms
func chunkEntries(entriesToChunk: [Entry]) -> [(String, [Entry])] {
let chunks = entriesToChunk.chunked(on: {
Calendar.current.dateComponents([.year, .month], from: $0.created)
})
return chunks.map {
let chunkDate = Calendar.current.date(from: $0.0)
return (sectionDateFormatter.string(from: chunkDate!), Array($0.1))
}
@colinfwren
colinfwren / EntryListView.swift
Created October 20, 2024 19:38
Unchunked Journal Entry List
import SwiftUI
import SwiftData
struct EntryListView: View {
@Query(sort: \Entry.created, order: .reverse) private var entries: [Entry]
let entryDateFormatter = DateFormatter()
init() {
entryDateFormatter.dateFormat = "EEEE, dd MMM yyyy"
}
@colinfwren
colinfwren / Entry.swift
Created October 20, 2024 19:30
Example Journal Entry model
import Foundation
import SwiftData
@Model class Entry {
var created: Date = Date.now
var text: String = ""
init(created: Date, text: String) {
self.created = created
self.text = text
const { useRef } = React
const Graph = () => {
const fgRef = useRef();
return <ForceGraph2D
ref={fgRef}
graphData={data}
nodeCanvasObject={nodeCanvasObject}
nodePointerAreaPaint={nodePointerAreaPaint}
function nodeCanvasObject(node, ctx, globalScale) {
const nodeColour = 'red'
const fontSize = 12/globalScale;
ctx.font = `${fontSize}px Sans-Serif`;
const textWidth = ctx.measureText(node.name).width;
const bckgDimensions = [textWidth, fontSize].map(n => n + fontSize * 0.2); // some padding
// node circle
ctx.fillStyle = 'red'
ctx.beginPath()
ReactDOM.render(
<ForceGraph2D
graphData={data}
/>,
document.getElementById('graph')
)
const data = {
nodes: [
{
id: "persona-unauthorised-user",
name: "Unauthorised user"
},
{
id: "persona-authorised-user",
name: "Authorised user"
},
@colinfwren
colinfwren / onAppear.swft
Created August 17, 2024 19:19
using onAppear to re-render PDF
struct CVDetailView: View {
@State private var cvdata: Data?
var body: some View {
VStack {
if (cvData != nil) {
CVPreviewView(pdfData: PDFDocument(data: cvData!)!)
}
}
.onAppear {