;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Logo Pagbenk Seu dinheiro rende mais
Topo

Mercados têm falta de alguns produtos em SP, mas negam desabastecimento

Lucas Borges Teixeira/UOL
Imagem: Lucas Borges Teixeira/UOL

Lucas Borges Teixeira

Colaoração para o UOL, em São Paulo

20/03/2020 20h35

Desde que a cidade de São Paulo começou a adotar medidas restritivas para combater a epidemia do novo coronavírus, os supermercados têm enfrentado um movimento atípico, com falta de produtos básicos. Clientes que procuraram por arroz na zona oeste ou por farinha de trigo nos Jardins ficaram sem o produto nesta sexta-feira (20) à noite.

Segundo a associação de supermercados, a cidade não enfrenta crise de abastecimento. Prateleiras vazias se dão por alta movimentação e dificuldade de reposição, como em grandes feriados.

Faltam produtos básicos

No supermercado Dia da rua Teodoro Sampaio, bairro de Pinheiros, zona oeste de São Paulo, faltavam produtos básicos, como arroz e quase todas as marcas de açúcar, e outros um pouco menos indispensáveis, como iogurte.

Os produtos em falta muitas vezes variam de um dia para o outro. Podem ser só derivados de trigo (como pães) ou proteína animal. Na última quarta (18), as prateleiras vazias da unidade eram das seções de laticínios e legumes, ambas plenamente abastecidas nesta sexta.

Uma funcionária do caixa explicava aos clientes que parte do estoque seria reposta ainda nesta noite ou no sábado (21) pela manhã.

No Pão de Açúcar da rua Oscar Freire, nos Jardins, a organização da loja não deixou prateleiras vazias — mas isso não quer dizer que não faltem produtos.

Na noite de sexta, a unidade sofria com a falta de alimentos como farinha de trigo e água de coco. Macarrão, alguns legumes e diferentes tipos de pão, como bisnaguinha e pão de forma integral, estavam quase no fim.

Em meio às prateleiras, o aviso de que "para estimular o consumo consciente", a rede limitava a venda de produtos, como água, açúcar e óleo de soja, por cliente.

À reportagem, o funcionário que rearrumava as estantes afirmou que novos carregamentos chegam diariamente, pela manhã, mas a demanda tem sido tão grande que um ou outro produto tem acabado enquanto outros estavam no estoque, mas ainda não haviam sido repostos.

Álcool gel continua em falta

O único produto não encontrado em nenhum dos três mercados visitados foi o disputado álcool gel. A reportagem presenciou consumidores pedindo pelo produto e recebendo resposta negativa em mais de uma ocasião.

Não há desabastecimento, diz associação

Ao UOL, a Apas (Associação Paulista de Supermercados) afirmou que não há desabastecimento na cidade. Segundo o grupo, há uma demanda tão alta que não tem dado tempo de repor os produtos nas prateleiras.

A associação compara o momento atual a dias com movimentação muito intensa de consumidores, como Natal e Páscoa, quando parte das prateleiras também ficam vazias, mas não é caso de desabastecimento.