forked from github/CopilotForXcode
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGlobalInstructionsView.swift
More file actions
82 lines (75 loc) · 2.65 KB
/
GlobalInstructionsView.swift
File metadata and controls
82 lines (75 loc) · 2.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import Client
import SwiftUI
import Toast
struct GlobalInstructionsView: View {
var isOpen: Binding<Bool>
@State var initValue: String = ""
@AppStorage(\.globalCopilotInstructions) var globalInstructions: String
@Environment(\.toast) var toast
init(isOpen: Binding<Bool>) {
self.isOpen = isOpen
self.initValue = globalInstructions
}
var body: some View {
VStack(spacing: 0) {
ZStack(alignment: .topLeading) {
Rectangle().fill(Color(nsColor: .separatorColor)).frame(height: 28)
HStack {
Button(action: {
self.isOpen.wrappedValue = false
}) {
Image(systemName: "xmark.circle.fill")
.foregroundStyle(.secondary)
.padding()
}
.buttonStyle(.plain)
Text("Global Copilot Instructions")
.font(.system(size: 13, weight: .bold))
Spacer()
}
.frame(height: 28)
}
ZStack(alignment: .topLeading) {
TextEditor(text: $globalInstructions)
.font(.body)
if globalInstructions.isEmpty {
Text("Type your global instructions here...")
.foregroundColor(Color(nsColor: .placeholderTextColor))
.font(.body)
.allowsHitTesting(false)
}
}
.padding(8)
.background(Color(nsColor: .textBackgroundColor))
}
.focusable(false)
.frame(width: 300, height: 400)
.onAppear() {
self.initValue = globalInstructions
}
.onDisappear(){
self.isOpen.wrappedValue = false
if globalInstructions != initValue {
refreshConfiguration()
}
}
}
func refreshConfiguration() {
NotificationCenter.default.post(
name: .gitHubCopilotShouldRefreshEditorInformation,
object: nil
)
Task {
do {
let service = try getService()
// Notify extension service process to refresh all its CLS subprocesses to apply new configuration
try await service.postNotification(
name: Notification.Name
.gitHubCopilotShouldRefreshEditorInformation.rawValue
)
} catch {
toast(error.localizedDescription, .error)
}
}
}
}