Skip to content

Commit 93cdbda

Browse files
Merge pull request #3248 from quadratichq/fix-getRenderCells-core-error
Fix core error after getRenderCells
2 parents 7f749d0 + 91ec3b8 commit 93cdbda

File tree

5 files changed

+52
-33
lines changed

5 files changed

+52
-33
lines changed

quadratic-client/src/app/web-workers/quadraticCore/worker/core.ts

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -147,20 +147,16 @@ class Core {
147147
y: number;
148148
width: number;
149149
height: number;
150-
}): Promise<Uint8Array | undefined> {
151-
return new Promise((resolve) => {
152-
if (!this.gridController) throw new Error('Expected gridController to be defined in Core.getRenderCells');
153-
try {
154-
const renderCells = this.gridController.getRenderCells(
155-
data.sheetId,
156-
numbersToRectStringified(data.x, data.y, data.width, data.height)
157-
);
158-
resolve(renderCells);
159-
} catch (e) {
160-
this.handleCoreError('getRenderCells', e);
161-
resolve(undefined);
162-
}
163-
});
150+
}): Uint8Array | undefined {
151+
if (!this.gridController) throw new Error('Expected gridController to be defined in Core.getRenderCells');
152+
try {
153+
return this.gridController.getRenderCells(
154+
data.sheetId,
155+
numbersToRectStringified(data.x, data.y, data.width, data.height)
156+
);
157+
} catch (e) {
158+
this.handleCoreError('getRenderCells', e);
159+
}
164160
}
165161

166162
// Gets the SheetIds for the Grid.

quadratic-client/src/app/web-workers/quadraticCore/worker/coreRender.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ class CoreRender {
7070
}
7171

7272
private async getRenderCells(request: RenderCoreRequestRenderCells) {
73-
const data = await core.getRenderCells(request);
73+
const data = core.getRenderCells(request);
7474
this.send({ type: 'coreRenderRenderCells', id: request.id, data }, data?.buffer);
7575
}
7676

quadratic-client/src/app/web-workers/renderWebWorker/worker/renderCore.ts

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import { renderText } from '@/app/web-workers/renderWebWorker/worker/renderText'
1919

2020
class RenderCore {
2121
private renderCorePort?: MessagePort;
22-
private waitingForResponse: Map<number, Function> = new Map();
22+
private waitingForResponse: Record<number, Function> = {};
2323
private id = 0;
2424

2525
async clientInit(renderPort: MessagePort) {
@@ -129,7 +129,12 @@ class RenderCore {
129129
resolve([]);
130130
return;
131131
}
132-
const id = this.id;
132+
133+
const id = this.id++;
134+
this.waitingForResponse[id] = (cells: JsRenderCell[]) => {
135+
resolve(cells);
136+
};
137+
133138
const message: RenderCoreRequestRenderCells = {
134139
type: 'renderCoreRequestRenderCells',
135140
id,
@@ -140,13 +145,9 @@ class RenderCore {
140145
height,
141146
};
142147
this.renderCorePort.postMessage(message);
143-
this.waitingForResponse.set(id, (cells: JsRenderCell[]) => {
144-
resolve(cells);
145-
});
146-
this.id++;
147148

148149
abortSignal?.addEventListener('abort', () => {
149-
this.waitingForResponse.set(id, () => {});
150+
delete this.waitingForResponse[id];
150151
reject('Render cells request aborted');
151152
});
152153
});
@@ -158,17 +159,19 @@ class RenderCore {
158159

159160
private renderCells(message: CoreRenderCells) {
160161
const { id, data } = message;
161-
const response = this.waitingForResponse.get(id);
162+
163+
const response = this.waitingForResponse[id];
164+
delete this.waitingForResponse[id];
162165
if (!response) {
163166
console.warn('No callback for requestRenderCells');
164167
return;
165168
}
169+
166170
let cells = [] as JsRenderCell[];
167171
if (data) {
168172
cells = fromUint8Array<JsRenderCell[]>(data);
169173
}
170174
response(cells);
171-
this.waitingForResponse.delete(id);
172175
}
173176
}
174177

quadratic-core/src/wasm_bindings/controller/render.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ impl GridController {
1010
pub fn get_render_cells(&self, sheet_id: String, rect: String) -> Result<Vec<u8>, JsValue> {
1111
let rect = serde_json::from_str::<Rect>(&rect).map_err(|e| e.to_string())?;
1212
let Some(sheet) = self.try_sheet_from_string_id(&sheet_id) else {
13-
return Result::Err("Sheet not found".into());
13+
return Ok(vec![]);
1414
};
1515
sheet.send_validation_warnings_rect(rect, true);
1616
let output = sheet.get_render_cells(rect, self.a1_context());

quadratic-rust-shared/Cargo.toml

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,13 @@ aes = { version = "0.8.4", optional = true }
1010
arrow = { version = "=54.2.1", optional = true }
1111
arrow-array = { version = "=54.2.1", optional = true }
1212
async-trait = "0.1.80"
13-
aws-config = { version = "1.1.1", features = ["behavior-version-latest"], optional = true }
14-
aws-sdk-s3 = { version = "1.12.0", features = ["behavior-version-latest", "rt-tokio"], optional = true }
13+
aws-config = { version = "1.1.1", features = [
14+
"behavior-version-latest",
15+
], optional = true }
16+
aws-sdk-s3 = { version = "1.12.0", features = [
17+
"behavior-version-latest",
18+
"rt-tokio",
19+
], optional = true }
1520
bigdecimal = "0.4.5" # need this fixed to the sqlx dependency
1621
bytes = "1.6.0"
1722
cbc = { version = "0.1.2", features = ["alloc"] }
@@ -27,12 +32,20 @@ httpmock = { git = "https://github.com/quadratichq/httpmock", version = "0.8.0-a
2732
"record",
2833
], optional = true }
2934
jsonwebtoken = { version = "9.2.0", optional = true }
30-
parquet = { version = "=54.2.1", default-features = false, features = ["arrow", "arrow-array", "flate2", "snap"], optional = true }
35+
parquet = { version = "=54.2.1", default-features = false, features = [
36+
"arrow",
37+
"arrow-array",
38+
"flate2",
39+
"snap",
40+
], optional = true }
3141
prost = { version = "0.13.5", optional = true, default-features = false }
3242
prost-reflect = { version = "0.15.1", optional = true, features = ["derive"] }
3343
redis = { version = "0.29.1", features = ["tokio-comp"], optional = true }
34-
reqwest = { version = "0.11.22", features = ["json", "serde_json"], optional = true }
35-
russh = { version = "0.51.1", optional = true }
44+
reqwest = { version = "0.11.22", features = [
45+
"json",
46+
"serde_json",
47+
], optional = true }
48+
russh = { version = "0.53.0", optional = true }
3649
russh-config = { version = "0.50.0", optional = true }
3750
rust_decimal = "1.30.0"
3851
serde = { version = "1.0.193", features = ["derive"] }
@@ -51,7 +64,14 @@ strum = "0.27.1"
5164
strum_macros = "0.27.1"
5265
tabled = { version = "0.14.0", features = ["color"], optional = true }
5366
thiserror = "2.0.12"
54-
tiberius = { version = "0.12.3", default-features = false, features = ["vendored-openssl", "bigdecimal", "chrono", "time", "tds73", "rust_decimal"], optional = true }
67+
tiberius = { version = "0.12.3", default-features = false, features = [
68+
"vendored-openssl",
69+
"bigdecimal",
70+
"chrono",
71+
"time",
72+
"tds73",
73+
"rust_decimal",
74+
], optional = true }
5575
tokio = { version = "1.44.2", features = ["full"], optional = true }
5676
tokio-util = { version = "0.7.11", features = ["compat"], optional = true }
5777
tracing = { version = "0.1.40", optional = true }
@@ -81,7 +101,7 @@ sql = [
81101
"tiberius",
82102
"tokio",
83103
"tokio-util",
84-
"tracing"
104+
"tracing",
85105
]
86106
storage = ["aws", "crypto", "tokio"]
87107
benchmark = ["criterion", "tabled"]
@@ -90,7 +110,7 @@ test = ["httpmock", "criterion", "tabled"]
90110
[dev-dependencies]
91111
arrow = { version = "=54.2.1", features = ["prettyprint"] }
92112
aws-smithy-async = { version = "1.2.1", features = ["test-util"] }
93-
aws-smithy-runtime = {version = "1.6.2", features = ["test-util"] }
113+
aws-smithy-runtime = { version = "1.6.2", features = ["test-util"] }
94114
aws-smithy-runtime-api = "1.7.1"
95115
criterion = { version = "0.5" }
96116
http = "1.1.0"

0 commit comments

Comments
 (0)